微机软件实验习题与答案(完整版)

合集下载

微型计算机技术课后习题一二三章答案

微型计算机技术课后习题一二三章答案

微计算机二三章1.已知物理地址为FFFF0H,且段内偏移量为A000H,若对应的段地址放在DS中,则DS应为(B) 。

A.5FFFHB.F5FFHC.5FFF0HD.F5FF0H2.下列CPU中属于准16位的是C 。

A.8080B.8086C.8088D.80386SX3.8088的外部数据总线为 A 位。

A.8B.16C.32D.644.8086CPU的内部结构由 D 组成。

A.ALU,EU,BIUB.ALU,BIU,地址加法器C.寄存器组,ALUD.EU,BIU5.每当8086的指令队列中有B空字节,BIU就会自动把指令取到指令队列中。

A.1个B.2个C.3个D.4个6.BIU的功能是C。

A.计算有效地址B.分析指令,产生控制信号C.与存储器或I/O端口之间进行传送,并能形成物理地址D.进行算术运算与逻辑运算7.指令队列缓冲器的作用是 D 。

A.暂存操作数地址B.暂存操作数C.暂存指令地址D.暂存预取指令8.8086的指令队列的长度是 C 字节。

A.4个B.5个C.6个D.8个9.8088的指令队列的长度是A字节。

A.4个B.5个C.6个D.8个10.下列寄存器都存在于BIU部件的是B。

A.SP、CSB.IP、DSC.BP、IPD.FR、SP11.8086 CPU内部共有 C 个16位寄存器。

A.12B.13C.14D.1612.不属于EU部分的寄存器是A 。

A.IPB.BPC.DID.SP13.8086/8088的状态标志有D个。

A.3B.4C.5D.614.8086有B个地址/数据复用引脚。

A.8B.16C.20D.3215.8088有 A 个地址/数据复用引脚。

A.8B.16C.20D.3216.8086/8088中,一个最基本的总线周期由 B 个时钟周期(T状态)组成。

A.1B.4C.2D.617.在8086/8088中,在T1状态,CPU往总线发出C信号。

A.数据B.状态C.地址D.其它18.总线周期为T1、T2、T3、T4,若要增加等待状态T W,它应插在C之后。

微机编程实验答案整理

微机编程实验答案整理

1、可编程定时器计数器8253(一)ioport equ 0d400h-0280hio8253a equ ioport+283hio8253b equ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io8253aout dx,almov dx,io8253b ;送计数初值为0FHmov al,0fhout dx,allll: in al,dx ;读计数初值call disp ;调显示子程序push dxmov ah,06hmov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dxand al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否<=9jle num ;若是则为'0'-'9',ASCII码加30Hadd dl,7 ;否则为'A'-'F',ASCII码加37Hnum: add dl,30hmov ah,02h ;显示int 21hmov dl,0dh ;加回车符int 21hmov dl,0ah ;加换行符int 21hpop dxret ;子程序返回disp endpcode endsend start2、可编程定时器计数器(二)ioport equ 0d400h-0280hio8253a equ ioport+280hio8253b equ ioport+281hio8253c equ ioport+283hcode segmentassume cs:codestart:mov dx,io8253c ;向8253写控制字mov al,36h ;使0通道为工作方式3out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节mov al,ahout dx,al ;后写入高字节mov dx,io8253cmov al,76h ;设8253通道1工作方式2out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21hcode endsend start3、加法DATA SEGMENTDATA1 DB ' ','2','6','8','5','9','$' ;' '空格用来存放最高位进位,'$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志。

微机原理作业及参考答案

微机原理作业及参考答案

第二章计算机基础(P32)1-1电子管,晶体管,中小规模集成电路、大规模、超大规模集成电路。

1-2把CPU和一组称为寄存器(Registers)的特殊存储器集成在一片大规模集成电路或超大规模集成电路封装之中,这个器件才被称为微处理器。

以微处理器为核心,配上由大规模集成电路制作的只读存储器(ROM)、读写存储器(RAM)、输入/输出、接口电路及系统总线等所组成的计算机,称为微型计算机。

微型计算机系统是微型计算机配置相应的系统软件,应用软件及外部设备等.1-3写出下列机器数的真值:(1)01101110 (2)10001101(3)01011001 (4)11001110答案:(1)+110 (2)-13(原码) -114(反码)-115(补码)(3)+89 (4)-78(原码)-49(反码)-50(补码)1-4写出下列二进制数的原码、反码和补码(设字长为8位):(1)+010111 (2)+101011(3)-101000 (4)-111111答案:(1)[x]原=00010111 [x]反= 00010111 [x]补= 00010111(2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011(3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000(4)[x]原=10111111 [x]反= 11000000 [x]补=110000011-5 当下列各二进制数分别代表原码,反码,和补码时,其等效的十进制数值为多少?(1)00001110 表示原码14,反码14,表示补码为14(2)11111111 表示原码-127,反码-0,表示补码为-1(3)10000000 表示原码-0,反码-127,表示补码为-128(4)10000001 表示原码-1,反码-126,表示补码为-1271-6 已知x1=+0010100,y1=+0100001,x2=-0010100,y2=-0100001,试计算下列各式。

微机习题+答案

微机习题+答案

微机习题+答案⼀、程序填空1、下列程序段要求在100 个带符号数中找出其中最⼤的⼀个数。

设该数据区⾸址的偏移地址=2000H,最后要求将最⼤值存⼊偏移地址=2100H的单元中,试填空完成该程序。

MOV BX,2000HMOV AX,[BX]MOV CX,100LOP1:INC BXCMP AL,[BX]JNG LOP2MOV AL,[BX]LOP2:LOOP LOP1MOV [2100H] ,AL5、求某数据区内负数的个数程序如下:(在空⽩处填⼊适当的语句)。

(1)STACK SEGMENT STACK DW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DI,3000HMOV CL,[DI]XOR CH,CHMOV BL, CHINC DIA1: MOV AL, [DI]TEST AL, 80HJE A2INC BLA2: INC DILOOP A1INT 03HCODE ENDSEND START(2)STACK SEGMENT STACKDB 20 DUP(?)STACK ENDSDA TA SEGMENTNUM DB ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START: MOV SI,2000HMOV CX,50MOV BL,00HA1: MOV AL,[SI]CMP AL,’A’;CMP AL,41HJNZ A2INC BLA2: INC SILOOP A1MOV NUM,BLINT 03HCODE ENDSEND START4、有如下程序段,DA TA SEGMENTX1 DB 0FAHX2 DB 0FCH DA TA ENDSCODE SEGMENT……MOV AL,X1ADD AL,X2……CODE ENDSEND问:ADD指令执⾏完后标志寄存器中的哪些位受到影响?标在题图中。

微机课后答案6-8(共18张PPT)

微机课后答案6-8(共18张PPT)
处继续执行。
6.6画出查询传送方式输 出数据的流程图
I/O
:F0000H-FFFFFH
存储器是:00000H-EFFFFH
6.8 习图6-2为一个LED接口电路,写出使8个LED管自左至右 依次发亮2s的程序,并说明该接口属于何种输入输出控制方式, 为什么?
~23H
D7
……8255A
D0
PB7 ……
MOV AL,0111 0000B;通道1,方式0,16计数,二进制计数
OUT 87H,AL
❖ L1: OUT 20H,AL

CALL DELAY2S

ROR AL,1

LOOP L1

JMP L2
MOV AL,10000000B
OUT 23H,AL
MOV AL,01111111B
L2: MOV CX,8 L1: OUT 21H,AL
CALL DELAY2S ROR AL,1 LOOP L1 JMP L2
答:07H
8.22 定时器8253输入时钟频率为1MHz,并设定为按BCD码计数,若写入的计数 初值为0080H,则该通道定时时间是多少?
答:设该通道的输出脉冲频率为X
则计数初值TC= 1MHz/ X=80 所以定时时间T=1/X=80/1MHz=80μs
8.35用一片8255A控制一组红、绿、黄灯, 如习图8-8所示,反复检测s1、s2,要求由s1、s2 的“闭合”和“断开”控制红、绿、黄3灯的点 亮。
D7-D0
RD WR A0 A1 CS
8253
+5V
GATE0 CLK0 OUT0
转换 电路
图习8-5
解:
因为最高转速为1000转/秒,因此,转1s的脉冲数最高为 1000×50=Байду номын сангаас0000个=C350H,因此计数器必须用16位计数,并且用二 进制计数。 (1)采用定时测试转速,计算方法为:

微机软件实验习题与答案(完整版)

微机软件实验习题与答案(完整版)

微机原理软件实验实验1 两个多位十进制数相加的实验实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'input the first number:','$'STRING2 DB 13,10,'input the second number:','$'STRING3 DB 13,10,'the output is:','$'DATA1 DB 6 DUP(00H),'$'DATA2 DB 6 DUP(00H),'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA SI,DATA1LEA DI,DATA2L0:LEA DX,STRING1;打印字符串STRING1MOV AH,09INT 21HINPUT1: ;输入第一个数MOV AH,01;输入字符至AL中INT 21HCMP AL,'/'JE L1MOV [SI],ALINC SIJMP INPUT1L1:LEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HINPUT2: ;输入第二个数MOV AH,01;输入字符至ALINT 21HCMP AL,'/'JE L2MOV [DI],ALINC DIJMP INPUT2L2:MOV SI,0CLC;清空进位标志位CFMOV CX,6PLUSE: ;相加;SUB DATA1[SI],30H;SUB DATA2[SI],30H;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使CF=1MOV AL,DATA1[SI]ADC AL,DATA2[SI]AAA;加法调整指令,可使两个ASCII数直接相加MOV DATA1[SI],AL;和赋给DATA1[SI]INC SILOOP PLUSEL3:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HMOV CX,6MOV SI,6SHOW:DEC SICMP DATA1[SI],00HJE SHOWSHOW2:MOV DL,DATA1[SI]ADD DL,30HMOV AH,02INT 21HCMP SI,0JE L4DEC SIJMP SHOW2L4: MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:4321+99999=104320)实验2 两个数相乘的实验(无符号数相乘)实验内容:实现十进制数的乘法。

微机原理实验编程题(完整)

微机原理实验编程题(完整)

1)(正确)比较两个无符号数的大小(量个数放在内存S3的连续两个单元中),将大数存入MAX单元中。

DATAS SEGMENTBUF DB 1,2CNT EQU $-BUFDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV CX,CNT-1LEA BX,BUFMOV AL,[BX]L2: INC BXCMP AL,[BX]JAE L1MOV AL,[BX]L1:LOOP L2ADD AL,30H- 1 - / 16MOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND STAR2)(正确)试编一程序,求三个带符号数据中的最大值,并将最大值存入MAX单元中,设三个带符号数分别在三个变量X,Y,Z中存储。

DATAS SEGMENTX DB 5Y DB-2Z DB 0MAX DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV AL,XMOV BL,YCMP AL,BLJG L1MOV AL,BLL1:MOV BL,ZCMP AL,BLL2: MOV MAX,ALMOV AH,4CHINT 21HCODES ENDSEND START3)(正确)根据MODE单元中编号0-7分别转向L0-L7标号处,执行L0-L7处分别完成显示‘0-7’字符,即当MODE=0时,转向L0标号,完成显示‘0’,当MODE=7时,转向L7标号,完成显示‘7’。

DATAS SEGMENTMODE DB 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:- 3 - / 16MOV AX,DATASMOV DS,AXMOV AL,MODECMP AL,0JZ L0CMP AL,1JZ L1CMP AL,2JZ L2CMP AL,3JZ L3CMP AL,4JZ L4CMP AL,5JZ L5CMP AL,6JZ L6MOV DL,'7'MOV AH,02HINT 21HJMP L8L0:MOV DL,'0'MOV AH,02HINT 21HJMP L8L1:MOV DL,'1'MOV AH,02HINT 21HJMP L8L2:MOV DL,'2'MOV AH,02HINT 21HJMP L8L3:MOV DL,'3'MOV AH,02HINT 21HJMP L8L4:MOV DL,'4'- 5 - / 16MOV AH,02HINT 21HJMP L8L5:MOV DL,'5'MOV AH,02HINT 21HJMP L8L6:MOV DL,'6'MOV AH,02HINT 21HJMP L8L8:MOV AH,4CHINT 21HCODES ENDSEND START4)(正确)根据输入值(0-4)的不同,执行不同的操作,用转移标法编写程序。

微机原理习题答案(完整版)

微机原理习题答案(完整版)

第一章习题答案1-1 请说明CPU的功能以及CPU是如何执行指令和程序的。

答:CPU的功能是执行程序和统筹处理计算机系统中各类事务。

CPU执行指令分为3步:取指令、分析指令、执行指令;计算机程序是由一条条指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的过程,其方式分为串行作业方式和流水线作业方式。

1-2 请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。

答:CPU:由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件的工作;运算器的作用是进行逻辑运算和算术运算。

存储器:存储计算机工作时使用的信息,即指令代码和数据代码。

I/O接口电路:具有数据缓冲、数据隔离及数据转换的功能。

1-3 请问对于容量位8K的存储器芯片,它的地址线是多少根?答:8K=8192=213,故地址线为13根。

另附:存储器的数据线由存储器的字长决定,例如一块32K×16(存储器容量显示格式:存储单元数×存储单元的字长)的存储器,其地址线为15根,数据线为16根。

1-4 将十进制数78,134,分别用二进制数、十六进制数和8421BCD吗表示。

答:(78)D=(1001110)B=(4E)H=(01111000)8421BCD(134)D=(10000110)B=(86)H=(000100110100)8421BCD注:8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省略0。

1-5 将下列真值分别转化为用8位和16位二进制数表示的原码、补码和反码。

X=1000100;[X]8位原=[X]8位反=[X]8位补=01000100;[X]16位原=[X]16位反=[X]16位补=0000000001000100X= -1000100[X]8位原=11000100,[X]8位反=10111011,[X]8位补=10111100;[X]16位原=1000000001000100,[X]16位反=1111111110111011,[X]16位补=1111111110111100;X= -0111111[X]8位原=10111111,[X]8位反=11000000,[X]8位补=11000001;[X]16位原=1000000000111111,[X]16位反=1111111111000000,[X]16位补=1111111111000001;1-6 将下列补码转化成二进制数的真值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理软件实验实验1 两个多位十进制数相加的实验实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'input the first number:','$'STRING2 DB 13,10,'input the second number:','$'STRING3 DB 13,10,'the output is:','$'DATA1 DB 6 DUP(00H),'$'DATA2 DB 6 DUP(00H),'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA SI,DATA1LEA DI,DATA2L0:LEA DX,STRING1;打印字符串STRING1MOV AH,09INT 21HINPUT1: ;输入第一个数MOV AH,01;输入字符至AL中INT 21HCMP AL,'/'JE L1MOV [SI],ALINC SIJMP INPUT1L1:LEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HINPUT2: ;输入第二个数MOV AH,01;输入字符至ALINT 21HCMP AL,'/'JE L2MOV [DI],ALINC DIJMP INPUT2L2:MOV SI,0CLC;清空进位标志位CFMOV CX,6PLUSE: ;相加;SUB DATA1[SI],30H;SUB DATA2[SI],30H;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使CF=1MOV AL,DATA1[SI]ADC AL,DATA2[SI]AAA;加法调整指令,可使两个ASCII数直接相加MOV DATA1[SI],AL;和赋给DATA1[SI]INC SILOOP PLUSEL3:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HMOV CX,6MOV SI,6SHOW:DEC SICMP DATA1[SI],00HJE SHOWSHOW2:MOV DL,DATA1[SI]ADD DL,30HMOV AH,02INT 21HCMP SI,0JE L4DEC SIJMP SHOW2L4: MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:4321+99999=104320)实验2 两个数相乘的实验(无符号数相乘)实验内容:实现十进制数的乘法。

要求被乘数和乘数均以ASCII码形式各自顺序存放在内存中,乘积在屏幕上显示出来。

完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'the output is:','$'DATA1 DB 31H,32H,33HDATA2 DB 35H,36HDATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV DL,10MOV AL,DATA1[0];AL=31HSUB AL,30H ;AL=01HMUL DL;乘10 ;AL=10ADD AL,DATA1[1];AL=10 +32HSUB AL,30H ;AL=10 +32H-30H=12MUL DL ;AL=120ADD AL,DATA1[2];AL=120+33HSUB AL,30H ;AL=120+33H-30H=123MOV BL,AL ;BL=AL;MOV AL,DATA2[0];AL=35HSUB AL,30H ;AL=5MUL DL;乘10 ;AL=50ADD AL,DATA2[1];AL=50+36HSUB AL,30H ;AL=50+36H-30H=56MUL BL ;AX=123x56=6888SUB DX,DX;DX清零MOV BX,1000DIV BX;(DX,AX)/1000,商6在AX中,余数888在DX中PUSH DXMOV DL,ALADD DL,30HMOV AH,02 ;打印最高位6INT 21HPOP DXMOV AX,DX;888赋给AXDIV BL;AX/100,商放在AL中,余数88放在AH中MOV DL,ALMOV CL,AH ;!!!这里千万不能把AH直接赋给AL,因为经过INT 21H指令后AL,AH会改变ADD DL,30HMOV AH,02;打印第二位INT 21HMOV BL,10MOV AL,CLSUB AH,AH;清空AHDIV BL;AX/10,商放在AL中,余数8放在AH中MOV DL,ALMOV CL,AHADD DL,30HMOV AH,02;打印第三位INT 21HADD DL,30HMOV AH,02;打印第四位INT 21HCODES ENDSEND START运行结果为:实验3 字符串匹配实验实验内容:编写程序实现两个字符串比较。

如果相同,则屏幕显示“match”,否则屏幕显示”nomatch”,完整代码如下:DATAS SEGMENT;此处输入数据段代码PRINT1 DB'input the first string:','$'PRINT2 DB 13,10,'input the second string:','$'PRINT3 DB'match','$'PRINT4 DB'nomatch','$'PRINT5 DB 13,10,'output: ','$'STRING1 DB 30 DUP(00H),13,10,'$'STRING2 DB 30 DUP(00H),13,10,'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA DX,PRINT1;打印字符串PRINT1MOV AH,09INT 21HLEA SI,STRING1;STRING1地址赋给SILEA DI,STRING2;STRING2地址赋给DIINPUT1:MOV AH,01;输入字符至ALINT 21HCMP AL,'/';输入字符串以‘/’结束,转L0 JE L0MOV [SI],ALINC SIJMP INPUT1L0:LEA DX,PRINT2;打印字符串PRINT2MOV AH,09INT 21HINPUT2:MOV AH,01; 输入字符至ALINT 21HCMP AL,'/'JE L1MOV [DI],ALINC DIJMP INPUT2L1: MOV CX,30 ;CX=30代表比较30次MOV SI,00HCOMPARE:;字符串一个一个比较MOV AL,STRING1[SI];取STRING1存储单位中的第SI个字符赋给AL CMP AL,STRING2[SI];AL与STRING2存储单位中的第SI个字符比较 JNE NOMATCHINC SILOOP COMPAREJMP MATCHNOMATCH:;打印output:nomatch LEA DX,PRINT5MOV AH,09INT 21HLEA DX,PRINT4MOV AH,09INT 21HJMP L2MATCH:;打印output:matchLEA DX,PRINT5MOV AH,09INT 21HLEA DX,PRINT3MOV AH,09INT 21HL2: MOV AH,4CHINT 21HCODES ENDSEND START 运行结果:实验4 从键盘输入数据并显示的实验实验内容:将键盘输入的2位十六进制数转换为等值的二进制数,并在屏幕上显示。

列如:键入f2,则显示11110010.完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'please input a string:','$'STRING2 DB 13,10,'the output is:','$'STRING3 DB 13,10,'input error',13,10,'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码L0: LEA DX,STRING1;打印字符串STRING1 MOV AH,09INT 21HMOV AH,01;输入第一个字符至AL中INT 21HCMP AL,'0'JB ERROR1CMP AL,'9'JBE ENTER1CMP AL,'A'JB ERROR1CMP AL,'F'JBE ENTER1CMP AL,'a'JB ERROR1CMP AL,'f'JBE ENTER1ERROR1:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HJMP L0ENTER1:CALL ASC2BCD;把ASCII码转化成十进制数BCD码MOV CL,4ROL AL,CLMOV BL,AL;把高四位放到BL寄存器中;输入第二个字符MOV AH,01;输入第二个字符至AL中INT 21HCMP AL,'0'JB ERROR1CMP AL,'9'JBE ENTER2CMP AL,'A'JB ERROR1CMP AL,'F'JBE ENTER2CMP AL,'a'JB ERROR1CMP AL,'f'JBE ENTER2ENTER2:CALL ASC2BCD;把ASCII码转化成十进制数BCD码ADD BL,ALLEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HMOV CX,9CLC;清空标志位SHOW: ;显示BL中的二进制数DEC CXCMP CX,0JE NEXT ;输出完八位之后返回DOSROL BL,1 ;循环左移一位,若溢出为1,则CF=1 JC M1JMP M2M1: MOV DL,'1';若CF=1,转至M1打印‘1’MOV AH,02INT 21HJMP SHOWM2: MOV DL,'0';若CF=0,转至M1打印‘0’MOV AH,02INT 21HJMP SHOWNEXT:MOV AH,4CHINT 21HASC2BCD PROCCMP AL,'9'JBE L1 ;若AL≤9,转L1SUB AL,07H ;若输入的数为A~F,或者a~f,则减7,A接在39H后面,A~F=3AH~3FH,a~f=5AH~5FHL1: SUB AL,30H ;减30HAND AL,0FH ;滤除高位,保留低位,因为a~f恰好比A~F大20H,这样a~f 就和A~F的数值一样了RETASC2BCD ENDPCODES ENDSEND START输出结果为:(若输出不在0~9,A~F,a~f内,则重新输入)实验5 字符和数据计算的实验实验内容:先在屏幕上显示“input string,”,输入字符串; 再显示“result=”。

相关文档
最新文档