3微机原理与接口技术 习题与课后答案 (雷丽文 著) 电子工业出版社
发布时间:2024-11-06
发布时间:2024-11-06
微机原理习题与答案
第一章微机基础
1-1微处理器、微机与微机系统三者之间有什么不同?
答:微处理器一般也称为CPU,它本身具有运算能力和控制功能。微型计算机是由CPU、存储器、输入/输出接口电路和系统总线构成的裸机系统。微型计算机系统是以微型计算机为主机,配上系统软件和外设之后而构成的计算机系统。微处理器是微型计算机的一组成部分,而微型计算机又是微型计算机系统的一组成部分。
1-2CPU在内部结构上由那几部分组成?
答:8位CPU在内部结构上由寄存器阵列、算术逻辑运算单元ALU、控制器和内部总线及缓冲器等部分组成。
1-3总线接口部件有哪些功能?8086的执行部件有什么功能?
答:总线接口部件的功能是负责与存储器、I/O端口传送数据。
执行部件的功能是负责指令的执行。
1-48086/8088的状态标志和控制标志分别有哪些?
答:8086/8088的状态标志有6个:CF、AF、SF、PF、OF、ZF,控制标志有3个:TF、DF、IF。
1-58086/8088和传统的8位计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?
答:8位饥是取一条指令,执行一条,再取,再执行;
8088执行时,取指与执行几乎是同时进行的。
1-68086/088微处理器中有哪些寄存器?通用寄存器中哪些可以作地址指针用?
答:8086/8088各有14个寄存器,它们可分为3组:
(1)四个通用寄存器和四个变址和指针寄存器,即AX,BX,CX,DX,SP,BP,SI,DI。
(2)四个段寄存器,即CS,DS,SS,ES。
(3)两个控制寄存器,即IP,FR。
1-78086/808820位物理地址是怎么样形成的?当CS=2000H,IP=0100H,其指向的物理地址等于多少?
答:物理地址=段地址×16+段内偏移地址。
20100
1-8将下列十进制数分别转换成二进制数、八进制数和十六进制数:
128,511,1024,65535,1048575,512,0625,27/32,0.4375
128:10000000,200,80
511:111111111,777,1FF
1024:10000000000,2000,400
65535:1111111111111111,177777,FFFF
1048575:11111111111111111111,3777777,FFFFF
512:100000000,1000,100
0625:100111001,1161,139
27/32:0.1101100B,0.660Q,0.D8H
0.4375:0.0111,0.34,0.7
1-9将下列二进制数转换成十进制及十六进制数:1100110101B,101101.1011B
答:1100110101:821,335
101101.1011B:45.6875,2D.BH
1-10(4578)10=(0100010101111000)BCD=1000111100010B
1-11写出下列数的原码、反码、补码、和移码(设字长为8位):
15,-20,-27/32
15:00001111,00001111,00001111,10001111
-20:10010100,11101011,11101100,01101100
-27/32:1.1101100,1.0010011,1.0010100,0.0010100
1-1216位无符号定点整数的数值表示范围为多少?8位补码表示的数值范围是多少?16位补码呢?(整数情况)
答:16位无符号数表示的范围是0~~65535
8位补码表示的数值范围为+127~~-128。
16位补码表示的范围是-32768~~32767
1-13当两个正数相加时,补码溢出意味着什么?两个负数相加能产生溢出吗?试举例说明。
答:两个正数相加,补码溢出意味着其和正方向超出数域范围而产生错误结果。例如,当N=8时,用补码求109加84之和,所得结果(也为补码)为11000001,其真值为-63,显然出错了。原因是193>127。两个负数相加也可能产生溢出。当和小于-128时产生负向溢出。例如用补码求-l09加-84之和,得结果100111111(补码),其真值为+63。出错原因是-193<-128。
1-14写出3,A,ESC,CR,SP的ASCII码。
3:33H
A:41H
ESC:1BH
CR:0DH
SP:20H
1-15每个汉字的编码有几个字节组成?计算机中如何区别ASCII码和汉字内码?答:两个字节。在机器中汉字是以内码形式存储和传输的。
1-16设有两个正的浮点数N1=2P1*S1,N2=2P2*S2,问:(1)若P1>P2,是否有N1>N2?(2)若S1,S2是规格化的,上述结论是否正确?
答:(1)不能(2)正确
第二章8088/8086的指令系统
2-1试述8088微处理器的各种寻址方式,并写出各种寻址方式的传送指令1~~2条(源操作数寻址与目的操作数寻址)
答:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,变址寻址,基址加变址寻
址。
2-2对8086/8088CPU指出下列指令中哪些是错误的并说明原因。
(1)MOVBL,AX,W
(2)MOV100,CXW
(3)MOV[SI],AXR
(4)MOVCS,AXW
(5)MOV[SI],BUFFERW
(6)OUT541H,ALW
(7)INBL,DXW
(8)LEABX,AXW
(9)MOVBX,2[DI]R
(10)xchgal,100W
(11)movbyteptr[bx],1000W
(12)movax,[bp+4]R
(13)movax,csR
(14)movss,2400hW
2-3连续执行以下指令.填写指令执行结果.并上机验证结果。假设M代表存储单元物理地址.[R]代表寄存器间接寻址的存储单元内容,FLAGL代表标志寄存器低字节。SRC代表履操作数,DST代表目的操作数,MOD代表寻址方式。填空时用IM代表立即寻址方式.DRT代表直接寻址方式,R代表寄存器寻址方式,RIN代表寄存器间接寻址方式,IDX代表变址寻址方式.R&IDX代表基地址加变址寻址方式。
;exse2_3
MOVAX,2000H;AH=20HMOD=立即寻址
MOVDS,AX;AL=00HDS=2000HMOD=寄存器
MOVSS,AX;SS=2000HAX=2000H
MOVBX,2050H;BH=20HBL=50H
MOVSI,BX;SI=2050H
MOVDl,3050H;DI=3050H
MOVS1.DI;SI=3050H
MOVSP,5FFFH;SP=5FFFFH
MOVCL,25;CL=19H
MOVBL,CL;CL=19H
MOVAH,0F0H;AH=0F0H
MOVCH,AH;CH=0F0H
MOVBYTEPTR[DI],64;
[DI]=40HM=23050SRCMOD=DSTRIN
MOVWORDPTR[SI],256;[SI]=00[SI+1]=01H
M=;DSTMOD=RIN
MOVDL,[SI+1];DL=01H,M=23051,SRCMOD=IDX
MOVDH.1[SI];DH=01H,M=23051,SRCMOD=IDX
M0VAL,1十[SI];AL=01H,M=23051H
M0VWORDPTR[Bx][s1],34;[Bx十SI]=22H,DSTMOD=B&IDX,[BX+SI+1]=00H
MOV[BX+SI+4],BX;[BX+SI+4]=19H,20H
MOV2[BX+SI],BX;DSTMOD=B$IDX
MOVBP,2[BX+DI];BP=2019M=2506B,2506CSRCMOD=B&IDX
MOV[BP][DI],BX;[BP][DI]=19H,20HM=25069H,2506AH
MOVAX,[BP][DI];AX=2019HM=25609H,2560AH
MOVBL,AL;BL=19H
MOVES,BX;ES=2019H
PUSHBX;SP=5FFDH,,[SP]=19H,[SP+1]=20H
PUSHDI;SP=5FFBH,[SP]=50H,[SP+1]=30H
POPCX;SP=5FFDH,CX=3050H
POPDX;SP=5FFFH,DX=2019H
XCHGAX,BP;AX=2019,BP=2019H
XCHGDH,BL;DH=19H,BL=20H
SAHF;AH=20H
CMC;CF=1
LAHF;AH=03H
STD;DF=1
CLI;IF=0
INT20
2-4连续执行以下指令,填写执行指令的结果,并上机核对结果
答:;exse2-4.asm
MOVAX,3502H;AL=02H,AH=35H,CF=0
MOVDS,AX;DS=3502H,AH=35H,CF=0
ADDAL,AH;AL=37H,AH=35H,CF=0
MOVDX,258;DH=01H,DL=02H,CF=0
SUBAX,DX;AX=3435H,DX=0102H,CF=0
MOVCX,0E0BAH;CX=E0BAH,CF=0
MOVAX,2400H
ADDAX,CX;AX=04BAH,CX=E0BAH,CF=1
ADCCX,AX;CX=E575H,AX=04BAH,CF=0
MOVSI,4000H;SI=4000
MOV[SI],CX;[SI]=75H,[SI+1]=E5H,M=39020
ADC[SI],AL;[SI]=2FH,CF=1
DECBYTEPTR[SI];[SI]=2EH,CF=1
MOVAX,09H;AX=0009H
ADCAX,09H;AX=0013H
AAA;AX=0109H,CF=1
ADDAL,09H;AL=12H
DAA;AL=18H
ADDAL,98H;AL=B0H,CF=0,AF=0
DAA;AL=18H,CF=1
MOVAL,5;AL=05H
NEGAL;AL=FBH
MOVBX,-15;BX=FFF1H
NEGBX;BX=000FH
CMPBH,BL;BH=00H,BL=0FH
MOVDL,20;DL=14H
MOVAL,5;AL=05h
MULDL;AX=0064H,DL=14H
MOVCH,4
DIVCH;AX=0019H,CH=04H
MOVDX,0F00H;DX=F000H
MULDX;AX=7000H,DX=0017H
MOVAL,5
NEGAL;AL=FBH
CBW;AH=FFH,AL=FBH
MOVDX,5;DX=0005H
IMULDX;AX=FFE7H,DX=FFFFH
MOVAX,5;AX=0005H
CWD;AX=0005,DX=0000H
MOVCX,5;CX=0005
NEGCX;CX=FFFBH
IDIVCX;AX=FFFFH,DX=0000
MOVAX,05H;AX=0005
NOTAX;AX=FFFAH
MOVBL,16H;BL=16H
ANDAH,BL;AH=16H,BL=16H
MOVCX,0F54BH;CX=F54BH
ORAX,CX;AX=F7FBH
XORCX,AX;AX=F7FBH,CX=02B0H
XORCX,AX;AX=F7FBH,CX=F54BH
MOVAX,0FFFFH;
XORCX,AX;CX=0AB4H
TESTCX,1234H;CX=0AB4H,PF=0,ZF=0,CF=0,SF=0
MOVAL,9
SARAL,1;AL=04H
MOVCL,4;CX=0A04H
PUSHCX
SHLAL,CL;AL=40H,CX=0A40H,CF=0
POPCX;CX=0A40H
MOVBX,850H;
RCLBX,CL;BX=8500H,CF=0
RORBX,1;BX=850H,CF=0
MOVDI,4050H
MOV[DI],BX
SARBYTEPTR[DI],1;[DI]=28H,M=39070H
CLC;CF=0
CMC
STC
CLD
STD
CLI
STI
INT20H;CF=1;CF=1;DF=0;DF=1;IF=0;IF=1;
2-5将共阳LED显示器所用BCD码数字0~~9的七段码列成一张表,从10H号外设端口读入0~~9的ASCII码,将它转换为七段码后输出到20H号端口去。写出完成上述任务的指令序列。
解:完成以上任务指令如下;
MOVBX,0FPSETTABLE;BX指向表首址
INAL,10H
SUBAL,30H
XLATTABLE
OUT20H,AL
TABLEDB0C0H,0F9H
DB0A4H,0B0H
DB99H,92H
DB82H,0F8H
DB80H,90H
2-6写出根据BX寄存器中b5=0转到标号L1的指令序列。若b5=1转移应作何修改?SALBL,2
SUBBL,80H
JGEL1
解:根据BX中的b5=0转:
TESTBX,0020H
JZL1
根据BX中的b5=1转L1
TESTBX,0020H
JNZL1
2-7写出BX和SI寄存器内容进行交换的堆栈操作指令序列,并画出堆栈区和SP的内容变化过程示意图。
答:PUSHBX
PUSHSI
POPBX
POPSI
2-8设a,b,c,d是互不相等的8位带符号数(补码),并假设加减法运算均不产生溢出。试写出完成下列运算的程序段,结果放在DX和AX中。
(1)(a+b)/(c-d)
(2)(a+b)*(c-d)
答:(1)(a+b)/(c-d)的程序段如下
MOVAL,a
ADDAL,b
MOVBL,c
SUDBL,d
CBW
IDIVBL
(2)(a+b)*(c-d)的程序段如下
MOVAL,a
ADDAk,b
MOVBL,c
SUBBL,d
IMULBL
2-9利用串操作指令完成数据从AREA1起始区域的100个字节传送到以AREA2为始地址的区域。(两个区域可重叠)。
答:MOVAX,2000H
MOVDS,AX
MOVES,AX
LEASI,AREA1
LEADI,AREA2
MOVCX,100
CMPSI,DX
JEDONE
JADF0
STD
ADDSI,99
ADDDI,99
JMPTRAN
DF0:CLD
TRAN:REPMOVSB
DONE:20H
2-10在指令CMPAX,BX后面跟一条格式为J*L1的条件转移指令,其中*可以是B,NB,BE,NBE,L,NL,NLE中任一个,如果AX和BX的内容如下:
AXBX
(1)3500H3500H
(2)0ABCDH7500H
(3)0FCD0H0FFE0H
(4)5678H4500H
(5)4567H0BA00H
对每一组AX和BX数据,使用哪几种格式的转移指令将引起程序转移到L1?
答:在*可取的8种形式中,前四种是将参与比较的AX和BX中的数看成是无符号数,B含义是低于(即AX低于BX)、NB是不低于、既是低于或等于、NBE是不低于且不
等于;后四种是将AX和BX中的数看成是符号数(补码),L含义是小于、NL是不小于、LE是小于或等于、NLE是不小于且不等于。
(1)只要包含有“等于”的,号形式均可使程序转移到L1,所以可取NB、BE、NL和LE。
(2)若将0ABCDH和7500H看成无符号数,则前者高于后者,所以可取NB、NBE。若将它们看成符号数,前者为负,后者为正,所以可取L和LE。
(3)与(2)同理,*可取B、BE、L和LE四种。
(4)*号可取NB、NBE.NL和NLE四种。
(5)*号可取B、BE、NL和NLE四种。
2-11试将Buffer起始的50个字节的组合BCD数字转换成ASCII码存放于ASC为起始地址的单元中,高位BCD数字位于较高地址。
解:
LEASI,BUFFER
LEADI,ASC
MOVCX,50
L1:MOVAL,[SI]
MOVBL,AL
ANDAL,0FH
ORAL,30H
MOV[DI],AL
INCDI
MOVAL,BL
PUSHCX
MOVCL,4
SHRAL,CL
POPCX
ANDAL,0FH
ORAL,30H
MOV[DI],AL
INCDI
INCSI
LOOPL1
INT20H
2-12给以TAB为首的100个ASCII码字符添加奇偶校验位(bit7)使每个字节中的“1”的个数为偶数,再顺序输出到10H号端口。
解:MOVSI,OFFSETTAB
MOVCX,100
L2:MOVAL,[SI]
ANDAL,0FFH
JPL1
ORAL,80H
L1:OUT10H,AL
INCSI
LOOPL2
INT20H
2-13已知四字节数存放于NUM开始的连续四字节中,高字节位于高地址。试编写将它左移一位的程序。(假设移位后字节数不变)。
解:LEABX,NUM
SALWORDPTR[BX+0],1
RCLWORDPTR[BX+2],1
2-14设DS=2100H,SS=2400H,BX=1400H,BP=0010H,说明下面两条指令所进行的具体操作:
MOVWORDPTR[BP],2000
MOVWORDPTR[BX],2000
解:(1)BP与SS段寄存器确定存放的物理地址,指令执行后[24010H]=D0H,
[24011H]=07H
(2)BX与DS段寄存器碘定存放的物理地址,指令执行后[22400H];D0H,
[22401H]=07H
2-15用串操作指令设计实现如下功能的程疗段:首先将100H个数从2170H处搬1000H处.然后从中检索出内容与VAL相等的单元.并将此单元内容换成空格符。
解:MVSCH:MOVAX,DS
MOVES,DS
MOVSI,2170H
MOVDI,1000H
MOVCX.100H
CLD
REPMOVSB
MOVBL,00H
MOVCX,100H
MOVDI,1000H
MOVAL.VAL
L2:REPNESCASB
JZL1
JMPDONE
L1:DECDI
MOVSYTEPTR[D1],20H
MOVBL,0FFH
INCDI
INCCX
LOOPL2
CONE:RET
2-16下面程序段实现对两个存储区中的字进行比较。如找到一对不同的字,则退出,此时,ZF标志为0,DI指向此字;如两个存储块中所有字均一一相同.则退出程序时,CX中值为0,ZF标志为1阅读这一程序段,填写空白(添加合适的指令),并仿此设计一个比较字节块的程序段。
;exse2_16.asm
MATT:MOVSI,OFFSETSOUCE;源区首址
MOVDI,OFFSETTARGET;目的区首址
MOVCX,NUMBER
JCXZEXIT;如CX为0,则结束
PUSHCX;保存有关寄存器
PUSHSI
PUSHDI
————;设置方向标志
REPECMPSW;比较
————;ZF=1,则转移
PUSHF;ZF=0,则DI指向此字
SUBDI,2
POPF
————;再退出
MATCH:POPDI
POPSI
POPCX
EXIT:RET
解:三个空白处分别填CLD;JZMATCH,JMPEXIT。字节块比较程序只需将原程序段中的CMPSW改为CMPSB;SUBDI,2改为别SUBDI,1即可。程序中JCXZEXIT指令操作是当CX=0时,则转至标号EXIT处。EXIT标号离本指令IP的距离必须在-128至+127范围之内。
2-17从80286与8088指令系统看.80286CPU的功能比8088CPU在哪些方面有所加强?答:80286有实地址和虚地址保护两种运行方式。80286的实地址运行方式兼容了8088/8086全部功能。因此8088/8086的汇编语言程序可以在80286上运行。此外还增加了堆栈传送指令和输入输出的串操作指令。80286CPU比8088/8086CPU功能增强主要体现在虚地址保护运行方式下,除可执行8088/8086指令集外,还提供了存储管理和保护的指令.使内存增至16MB,虚拟存储达1GB,并具备运行多任务的能力。
第三章汇编语言程序设计
3-1填写以下空白并上机检查答案是否正确。
;exse3-1.asm
DATASEGMENTPARA‘DATA’
QAEQU255;QA=0FFH
QA1=QAGT3000;QA1=0
QA2=0FFFH;QA2=0FFFH
QA3EQUQA2-255;QA3=0F00H
QA4=88MOD5;QA4=3
QA5=88HSHR2;QA5=22H
QA6=QA3/16+15;QA6=10FH
ORG1060H
G1DB32,QA,98/2,NOT25;DS:1060H:20H,0FFH,31H,0E6H
G2DWOFF6H,OFFSETG2;DS1064H:0F6H,0FH,64H,10H
G3DW3DUP(5);DS1068H:05H,00H,05H,00H,05H,00H
G4DWSEGG1;:
SAEQULENGTHG3;SA=3
SBEQUSIZEG3;SB=6
SC=TYPEG3ORG1200H;SC=2
F1=THISWORD;OFFSETF1=12000H,TYPEF1=2
F2DB11H,22H,33H,44H;1200H:11H,22H,33H,44H
FFDD12345H;1204H:45H,23H,01H,00H
DATAENDS
STACKSEGMENTSTACK‘STACK’
DB100DUP(?)
STACKENDS;SP=0064H
CODESEGMENTWORD‘CODE’
ASSUMECS:CODE,DS:DATA
STARPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAL,BYTEPTRG2;AL=0F6H
MOVBL,TYPEEF;BL=04H
MOVAX,WORDPTRFF;AX=2345H
ANDAX,0FFH;AX=0045H
MOVBX,WORDPTRG1;BX=0FF20H
MOVBX,255AND0FH;BX=000FH
MOVCL,LOWQA4;CL=03H
MOVAL,LOWQA1;AL=0
MOVBL,HIGHQA5;BL=0
MOVDL,TYPESTAR;DL=0FEH
ADDAX,OFFSETF2;AX=1200H
MOVBX,F1;BX=2211H
RET
STARENDP
CODEENDS
ENDSTAR
3-2指令ANDAX,XANDY中X和Y是两个已赋值的常量,问:两个AND操作分别
在什么时间进行?功能上有何区别?
答:指令中的XANDY操作在程序汇编时进行,该操作完成后得到一个数,即为指令中的第二操作数。由此得到“ANDAX,立即数”这样形式的一条指令,由汇编器将其翻译为机器码。该指令中的AND操作由CPU在执行指令时完成,结果存于AX中,并影响F寄存器。
3-3指出以下三条指令的区别(NUM为数据段一个变量名)。
(1)MOVSI,NUM
(2)LEAS1,NUM
(3)MOVSI.OFFSETNUM
(1)内容送SI(2)把NUM的值送SI地址(3)把NUM的偏移地址送SI
答:(1)指令执行后SI取得酌是内存变量NUM的值。
(2)指令执行后SI取得的是内存变量NUM的偏移地址
(3)同(2)。
3-4下面是一个实现多字节非组合BCD码相加的程序.阅读此程序后设计一个实现多字
节组合比BCD码相加的程序。若是减法.程序应作何修改?若进行多字节二进制数加(减)法又应怎样修改?
;exse3_4.asm
datasegment
num1db3,5,6,1,4
contequ$—numl
num2db4,7,8,2,3
sumdbcontdup(0)
dataends
stacksegmentparastack‘stack’
db100dup(‘s’)
stackends
codesegment
asumecs:code,ds:data,
begin:movax,data
movds.ax
moves,ax
leasi,.numl
leabx,num2
leadi,sum
addsi,cont-1
addbx,cont-1
adddi,cont-1
movcx,cont
std
clc
l1:lodsb
adcal,[bx]
aaa
stosb
decbx
loopl1
movah,4ch
int21h
codeends
endbeginss:stackes:data
解;(1)多字节组合BCD码相加程序,只需将程序中的AAA指令改为DAA指令。
(2)多字节组合BCD码减法程序,只得将程序中的ADCAL,[BX]改为SBBAL,[BX];把AAA指令改为DAS指令。
(3)多字节非组合BCD码减法,则需把程序中的ADCAL,[BX]改为SBBAL,[BXl5把AAA指令改为AAS指令‘
(4)若是多字节二进制数加法.则只需将原程序中的AAA指令去掉即可。
(5)若是多字节二进制数减法,则需将原程序中的ADCAL,[BX]改为SBBAL去掉AAA指令。
3-5定义一条宏指令,它可以实现任一数据块的传送(假设无地址重达发生).只要给出源和目的数据块的首地址以及数据块的长度即可。给出一个使用该定调用进行程序块传送的编程。
解:BLKMOVMACROBLX.DLY,Z
PUSHSI
PUSHN
PUSHCX
PUSHF
CLD
LEASI,BLX
LEAD1,BLY
MOVCX,Z
REPMOVSB
POPF
POPCX
POPDI
POPS1
ENDM
DATASEGMENT
BLOCK1DB11,22,33,44,55,66,77,88,99,00
LENTH1EQU$—BLOCKl
BLOCK2DBLENTHlDUP(?)
DATAENDS
STACKSEGMENTPARASTACK’STACK’
DBl00DUP(’S’)
STACKENDS
CODESCGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK,ES,DATA
BEGIN:MOVAX.DATA
MOVDS,AX
MOVES,AX
BLKMOVBLOCK1,BLOCK2.LINTHI
MOVAH,4CH
INT21H
CODEEND5
ENDBEGIN
3-6利用例3-232位无符号数乘法的过程没计进行32位符号数乘法的运算的程序。方法如下:首先设一个乘积的符号标志(可以是一个字节)为0;检查被乘数,若为负,一方面对被乘数取补,另一方面对符号标志取反;再检查乘数,若是负数也对乘数取补和符号标志取反;然后调用32位无符号数乘法程序,最后检查乘积符号标志.若为负(即两个异号数相乘),则对64位乘积取补。画出流程图并编写程序。
解:DATASEGMENT
NUM1DW0000H,8000H
NUM2DW2000H.7800H
MUTDW4DUP(0)
SIGNDB?
DATAENDS
STACKSEGMENTPARASTACK
DB100DUP(’S’)
STACKENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES:STACK
MULS32PROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVSIGN,0
LEABX,NUM1
CMPWORDPTB[BX+2],0
JNSL1
NOTWORDPTR[BX]
NOTWORDPTR[BX+2]
ADDWORDPTR[BX],1
ADCWORDPTR[BX十2],0
NOTSIGN
L1:CMPWORDPTR[BX+6],0
JNSL2
NOTWORDPTR[BX+4]
NOTWORDPTR[BX+6]
ADDWORDPTR[BX十4],1
ADCWORDPTB[BX十6],o
NOTS1GN
L2:CALLMULU32
CMPSIGN,0
JEDONE
NOTWORDPTR[BX+8]
NOTWORDPTR[BX+10]
NOTWORDPTR[BX+12]
NOTWORDPTR[BX+141
ADDWORDPTR[BX+8],1
ADCWORDPTR[BX+10],0
ADCWORDPTR[BX十121,0
ADCWORDPTR[BX十14].0
DONE:RET
MULS32ENDP
MULU32PROC
LEABX,NUM1
MOVAX,[BX]
MOVSI,[BX+4]
MOVDI,[BX+6]
MULSI
MOV[BX+8],AX
MOV[BX+10],DX
MOVAX,[BX+2]
ADD[BX+10],Ax
ADC[BX+12],DX
MOVAX,[BX]
MULDI
ADD[BX+10],Ax
ADC[BX+12],DX
ADCWORDPTR[BX+14]
MOVAX,[BX+2]
MULDI
ADD[BX+12],AX
ADC[BX+14],DX
RET
MULU32ENDP
CODEENDS
ENDMULS32
3-7试编程序判断变量VAL是否满足下述关系.满足时置BL=0FFH,否则置BL=00H:
(1)24<VAL<=5AH设VAL为无符号数。
(2)-5<VAL<32H设VAL为符号数。
解:DATASEGMENT
VALDB32
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
DBl00DUP(’s’)
STACKEND6
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
JUDGE1PROCFAR
L1:PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAL,VALCMPAL,24JBEL1CMPAL,5AHJAL1MOVBL,0FFHJMPDONEMOVBL,00H
JUDGE1ENDP
ENDJUDGE1
(2)
DATASEGMENT
VALDB12H
DATAENDS
STACKSEGMENTSTACK‘STACK’
DB50DUP(’S’)
STACKENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES:sTAcK
BEGIN:MOVAX.DATA
MOVDS,AX
CMPVAL,32H
JGEL1
CMPVAL,-5
JLL1
MOVBL,0FFH
JMPL2
L1:MOVBL,00H
L2:MOVAH,4CH
INT21
CODEENDS
ENDBEGIN
3-8利用DOS功能1号调用输入一位16进制数、将它转换为ASCII码、BCD码和格霄码.并在CRT上显示出来。提示:可在数据段建立三张表.然后用基址变址寻址方法来查表(也可用查表指令)。
DATASEGMENT
TABLEDB‘0123456789ABCDEF’
DB0,1,2,3,4,5,6,7,8,9,10H,11H,12H,13H,14H.15H
DB0,1,3,2,6,7,5,4,0CH.0DH,0FH,0EH,0AH、0bH,9,8