8086/8088汇编语言习题解答
第一章
1.1、试根据自己使用计算机的经历,列举几个必须使用或最好是使用汇编
语言编制程序的事例。 1.2、试完成下列数制间的转换 ⑴、十进制数转换为8位二进制数 十进制:100
对应 二进制:01100100B
十进制:56 对应 二进制:00111000B 十进制:111 对应 二进制:01101111B 十进制: 120 对应 二进制:01111000B
十进制: 70 对应 二进制:01000110B ⑵、8位二进制数(无符号数)转换为十进制数
二进制:01010101B 二进制:10101010B 二进制:11110000B 二进制:00001111B
对应 对应 对应 对应
十进制:85 十进制:170 十进制:240 十进制:15
⑶、十进制数转换为十六进制数
十进制:40
对应 二进制:00101000B
十进制:80 对应 二进制:01010000B 十进制:105 对应 二进制:01101001B 十进制: 114 对应 二进制:01101101B
十进制: 207 对应 二进制:11001111B
1.3、试把下面用补码表示的二进制数转换为对应的十进制真值 二进制补码:01111000 二进制补码:11011001 二进制补码:10000001 二进制补码:10001000 二进制补码:00100111 二进制补码:11110000
对应的十进制值数真值:+120 对应的十进制值数真值:-39 对应的十进制值数真值:-127 对应的十进制值数真值:-120 对应的十进制值数真值:+39 对应的十进制值数真值:-16
1.4、由键盘输入字符通常都是以该字符的ASCII码形式表示的。若现在从键盘上输入十六进制数0~F,那么应如何处理才能把十六进制转换为4位二进制数0000~1111.
答:将键盘输入的数0~F的ASCII码,每输入一个字符,减去30H后,再存入内存,这样就完成了把从键盘上输入的十六进制ASCII码转换为4位二进制数0000~1111.
1.5、试分别判断下列各组数据中哪个数据最大?哪个最小? ①、A=0.101B ②、A=1011B
B=0,101D B=1011D
?1C=0,101H C=1011H
?3答:第①组:A=1×2+1×2=0.625 B=0.101
C=1×16+16=0.0625+0.00024414=0.06274414
?1?3 所以A最大,C最小
第②组,B最大,A=B最小
1.6、现有一个二进制数10110110.若将该数看着是无符号数、原码表示的带符号数、补码表示的带符号数,它对应的十进制数的真值是多少?
答:10110110.的无符号数的十进制是:+182; 10110110.的原码带符号数的十进制是:-54 10110110.补码表示的带符号数的十进制是:+74
1.7、下列各组数据均为十进制数,先将各数据转换为补码表示的带符号数,然后用补码的加减运算分别完成下列各小题,并用十六进制数形式回答运算结果。
①、58+36 ⑤、58-36
②、(-58)+36 ⑥、(-58)-36
③、58+(-36) ⑦、58-(-36)
④、(-58)+(-36)⑧、(-58)-(-36)
答:①、58+36的运算结果是:00111010+00010100=01001110=01011110
②、(-58)+36的运算结果是:11000110+00010100=11101010=-000101001 ③、58+(-36)的运算结果是:00111010+11011100=00010110 ④、(-58)+(-36)的运算结果是:11000110+10100010=10100010 ⑤、 58-36的运算结果是:00111010+11011100=00010110 ⑥、(-58)-36的运算结果是:11000110+10100010=10100010
⑦、58-(-36)的运算结果是:00111010+00010100=01001110=01011110 ⑧、(-58)-(-36)的运算结果是:11000110+00010100=11101010=-000101001
第二章
2.1、试说明8086/8088CPU中有哪些寄存器?各有什么用途? 答:寄存器AX、AL:在乘法指令中,存放乘数和乘积;
在除法指令中,存放被除数和商; 在未组合BCD码运算的校正指令中
在某些串操作指令(LODS,STOS,SCAS)中 在输入输出令中作数据寄存器
寄存器AH:在LAHF指令中作目的寄存器
寄存器AL:在组合型BCD码的加减法校正指令中
在XLAT指令中作目的寄存器
寄存器BX:在XLAT指令中基址寄存器 寄存器CX:在循环指令中作循环次数计数器 寄存器CL:在移位指令中作移位次数计数器
寄存器DX: 在字数据的乘法和除法指令中辅助累加器 寄存器SP:在堆栈操作中作堆栈指计 寄存器SI:在串操作指令中作源变址寄存器 寄存器DI:在串操作指令中作目的变址寄存器
2.2、试说明8086/8088CPU中标志寄存器各标志位的意义? 答:8086/8088CPU中标志寄存器各标志位的意义是:
CF:进位标志
PF:奇遇标志 ZF:零值标志 TF:单步标志
AF:辅助进位标志 SF:符号位标志
IF: 中断允许标志 OF:溢出标志
DF:方向标志
2.3、哪些操作只能隐含使用某个段寄存器,而不能用其他寄存器替代?哪些操作除隐含使用某个段寄存器外,还可以用其他段寄存器替代?
答:在?取指令?、?堆栈操作?、?存目的串?三操作时,只能分别使
用隐含段寄存器?CS?、?SS??ES?,不能用其他寄存器替代;
在?取源串?、?以BP作基址?、?存取一般变量?三操作时,除了可分别使用隐含段寄存器?DS?、?SS??DS外,还可分别使用?CS、SS、ES”,
“CS、DS、ES” 、?CS、SS、ES”等进行替代。
2.4、8086/8088系列微机在存储器中寻找存储单元时,逻辑地址由哪两部分组成?
答:在8086/8088系列微机在存储器中寻找存储单元时,逻辑地址由段基值和偏移量两部分组成,它们都是16位无符号二进制数。
2.5、设IBM PC微机内存某一单元的物理地址是12345H,试完成下列不同的逻辑地址表示:
①、1234H:0005_H ;EA=段基值+DISP=12340H+0005H=12345H ②、1200H:0345H
2.6、假设某用户程序装入内存后,(SS)=0950H,(SP)=64H,试问该用户程序的堆栈底部(字单元)物理地址是是多少?
2.7、设堆栈段寄存器(SS)=3E4BH,程序中设置堆栈长度为200个字节。试计算出堆栈底部字单元物理地址,堆栈指针SP初始值(即堆栈中没有数据时)和SP初始值指向的物理地址。
2.8、设某用户程序(SP)=30H,(AX)=1234H,(DS)=5678H。如现有两条指令:
PUSH PUSH
AX DS
;EA=段基值+DISP=12000H+0345H=12345H
试问两条指令执行后,图2.18中各单元的数据是多少? (SP)=?
答: (SP)=30H-4H=2CH
2.9、在IBM-PC微机上,分别进行下列8位二进制数的运算后,标志寄
存器中OF、ZF、SF、CF的值各是多少?
①、10101011+01010101 ③、01010101-00111110 2.10、设(SP)=50H PUSH AX PUSH BX PUSH CX
执行上述三条指令后,(SP)= 44H。 2.11、设(SP)=6EH POPF POP
AX
②、11011010+11101101 ④、10110011-01100010
执行上述两条指令后,(SP)= 72H 。
第三章
3.1、试分别说明下列各指令中源操作数和目的操作数使用的寻址方式: ①、AND ②、AND ③、MOV ④、CMP ⑤、MOV ⑥、SUB ⑦、ADC ⑧、OR ⑨、PUSH
AX,0FFH
;立即数寻址 ;直接寻址 ;寄存器寻址 ;寄存器间接寻址
BL,[0FFH] DS,AX [SI],CX
DS:[0FFH],CL ;带前缀的直接寻址 [BP][SI],AH ;基址变址寻址 AX,0ABH[BX] ;基址寻址 AX,-35[BX][DI] DS
;基址变址寻址
;寄存器寻址
⑩、CMC
;立即数寻址
3.2、试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错误。
①、MOV ②、TEST ③、ADD ④、AND ⑤、CMP ⑥、SHR ⑦、NOT ⑧、LEA ⑨、INC ⑩、PUSH
[BX][BP],AX [BP],BL
;错,BX与BP必须二选一 ;正确
;错,源目操作数不能同时为存储器 ;错,同一寄存器高、低字节不能与 ;正确 ;正确
;错,NOT指令只有一个操作数 ;正确 ;正确 ;正确
[SI],DA_BYTE DH,DL
CL,1234H [BX][DI],3 CX,AX
DS,35[SI] CX,1 45[DI]
3.3、下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态?
MOV DL,,86 ADD DL,0AAH 答:以上两条指令执行后:
CF= AF= ZF= SF= OF=
3.4、在8086/8088CPU中可用于作地址指针的寄存器有哪些? 答:
3.5、已知(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H (CX)=5678H,(BP )=0024H,(SI)=0012H,(DI)=0032H,单元(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH 下各指标令或程序段分别执行后的结果如何?
①、MOV ②、MOV ③、LEA MOV ④、LDS
MOV ⑤、XCHG XCHG
3.6、已知(SS)=0915H,(DS)=0930H,(SI)=0A0H, (DI)=1C0H,(BX)80H,(BP)=470H.现有一指令 ?MOV
AX,OPRD?,若源操作数的物理地址为095C0H,试用4种不同寻
CL,20H[DI][SI] [BP][DI],CX BX,20H[BX][SI] AX,2[BX] SI,[BX][DI] [SI],BX CX,32H[BX] AX,[SI]
址方式该写此指令(要求上述每个已知条件至少要使用一次)。
3.7、已知(DS)=1234H,(SI)=124H,(12464H)=30ABH,(12484H)=464H
LEA
SI, [SI]
MOV MOV LDS ADD
AX, [SI] [SI+22H], 1200H SI, [SI+20H] AX, [SI]
上述程序执行后:(DS)= ,(SI)= (AX)=
3.8、已知(AX)=0A5C6H,(CX)=0F03H,CF=1 RCL AX, CL AND AH, CH
RCR
AX, CL
上述三条指令执行后:(AX)=
3.9、已知(AX)=0FC77H,(CX)=504H,CF=1 SAR
AX, CL
XCHG CH, CL SHL
AX, CL
上述三条指令执行后:(AX)=
3.10、已知(AX)=1234H MOV BX, AX NEG BX
ADD
AX, BX
上述三条指令执行后:(AX)= ,CF= (BX)= 。 。
,CF= 。
3.11、已知(AX)=4321H
INC NEG DEC NEG
AX AX AX AX
上述几条指令执行后:(AX)= 3.12、已知(AX)=0A33AH,(DX)=0F0F0H
AND XOR NEG NOT
AH,DL AL,DH AH AL
上述几条指令执行后:(AX)=
3.13、已知(AX)=0FF60H, CF=1
MOV XOR SBB
DX,96 DH,0FFH AX,DX
上述几条指令执行后:(AX)= ,CF= 。 3.14、试按下列要求分别编制程序段: ①、把标志寄存器中符号位SF置?1? ②、寄存器AL中高低4 位相互换
③、由寄存器AX ,BX组成一个32位带符号数(AX 中存高16位,试求这个数的负数)
④、现有三个字节存储单元A、B、C。在不使用ADD和ADC指令的情况下,实现(A) + (B)送C。
⑤、用一条指令把CX中的整数转变成奇数(若原来是奇数,则CX看数据不变;若原来是偶数,则(CX )+1形成奇数。
⑥、根据AX中有0的位对BX中对应位变反,其余各位保持不变 3.15、试给出下列各指令的机器目标代码: ①、MOV ②、MOV ③、SAL ④、ADD
BL,12H[SI] 12H[SI],BL DX,1
0ABH[BP][DI],1234H
第四章
4.1、已知下列程序段 DATA SEGMENT
DB1 DB 12H,34H,0,56H DW1 DW 78H,90H,0AB46H,1234H ADR1 DW DB1 ADR2 DW DW1
BUF DB 5 DUP(0) DATA ENDS COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA STACK1 SEGMENT PARA STACK DW 20H DUP(0)
STACK1 ENDS
ORG 30H START:
XOR CX,CX MOV CL,3 ADD ADR1,CX SUB ADR2,CX MOV BX,ADR2 MOV DI,ADR2 MOV AL,DB1[BX] MOV BUF[DI],AL MOV AX,DW1[BX][SI] MOV WORD PTR BUF,AX
COSEG ENDS
END START
上述程序段运行结束后,BUF中各字节单元的内容是什么? 答:AX:AC27,BX:0704,CX:0003,DX:0000 SI:0000,DI:0704,BP:0000,SP:0040 DS:139B,ES:139B,SS:13B3,CS:13AB IP:0053
DS:0030:CC 11 14 00 18 9B 13
4.2、某数据段中有
COUNT1 EQU 16H COUNT2 DW 16H
下面两条指令有何异同: MOV AX, COUNT1 MOV BX, COUNT2 答:AX:0016H, BX=1084H COUNT1 EQU 16H
是赋值语句
MOV BX, COUNT2是定义的地址指针,在1084H中才放字16H.
4.3、下面各题中有语法错误,试分别用两种办法修改题中语句,使它们在汇编时都能分别获得通过: ⑴、 M1 DW 5060H
MOV BL,M1
⑵、M2 EQU 10H
MOV M2,AL
⑶、M3 DW ‘ABCD’
⑷、M4 DB 1234
⑸、DATA1 SEGMENT
DA1 DW
1234H ENDS
DATA1
DATA2 DA2 DW
SEGMENT 5678H
DATA2 ENDS
CODE SEGMENT
CODE ENDS
MOV BX,DA2
ASSUME CS:CODE,DS:DATA1
4.4、设已定义数据段:
DA1 DA2
DB DB
XX, XX XX, XX DA1, DA2
DATA
SEGMENT
ADRR DW DATA ENDS
为使ADRR+2字存储单元中存内容为0022H,上述方框中应填写什么语句?
4.5、下面的程序段中,有数据为3000H的字存储单元有几个?它们的偏移量分别是多小?
ORG
30H
0, ?0?, 30H, 0, 30H DA1
DA1 DB
DW
4.6、下面的语句中有数据0102H的字存储单元有多少?
DB 10H DUP(1,2 DUP(2))
4.7、下述指令执行后,寄存器DS和SI的内容分别是多少?
LDS
SI,ADDR+1
ADDR
DW
1234H, 5678H, 0ABCDH
4.8、设某数据段为:
DATA
SEGMENT ORG
20H
NUM1=8 MUM2=NUM1+10H DB DB EQU DW ENDS
?IBM PC? 0AH,0DH
$=DA1
?IB?,?M?,?PC?,0A0DH
DA1
CUNT DA2
DATA
上述数据段定义后,DA1和DA2的偏移量,CUNT的值以及DA2+5字节单元的
内容分别是多少?
4.9、某源程序有如下数据段:
DATA1 DA1
SEGMENT DB ENDS SEGMENT DB
PAGE PUBLIC
DUP(0) WORD PUBLIC
DUP(0)
20H
DATA1 DATA2 DA2
20H
DATA2 ENDS
设DA1物理地址是134CEH,那么DATA2段基值,DA2的偏移量分别是多少?
4.10、下述程序段执行后,寄存器AX,BX和CX的内容分别是多少?
ORG DW MOV MOV MOV MOV
AX, DA_WORD BX, OFFSET DA_WORD CL, BYTE PTR
DA_WORD+1
0202H 20H
DA_WORD
CH, TYBE DA_WORD
4.11、下述程序段执行后,寄存器BX和CX的内容分别是多少?
4.12、下述程序段执行后,寄存器AX和BX的内容分别是多少?
MOV MOV
AX, ALPH LE NUM BX, ALPH GT NUM
NUM
EQU
945H
NUM1=20*20 NUM2 REL1
MOV MOV
BX, REL2
CX, WORD PTR REL2
EQU DW
400H NUM1 LE
NUM2, EQ NUM2
ALPH=35*27
4.13、下述语句汇编后,$+20H和$+40H中的$值分别是多少
NUM= DA1 DA2
DB
10H,$+20H,30H,$+490H
ORG
34H
DA1 + NUM + 40H
4.14、试用数据定义语句DW改写下述语句,使它们在存储器中有完全相同的存储情况。
DA1 DA2
DB ?ABCDEFGHI?
DB 12H, 34H, 56H,7 8H, 9AH, 0BCH
4.15、现有两个程序摸块:
TITLE
PROC
TITLE PROC2
SEGMEND
10H DUP(0)
DATA1 DA1
SEGMENT DATA2 DA2
DB 10H DUP(0)
DW
DATA1 ENDS CODE1
DATA2 ENDS
SEGMENT
CODE2
SEGMENT
ASSUME CS: CODE1 ASSUME DS: DATA1
ASSUME CS: CODE2 ASSUME DS: DATA2
PROC FAR
START: SUB2
MOV DX, DA2+2 CALL SUB2
MOV AL, DA1+2 RET
SUB2 ENDP
CODE1
ENDS END
CODE2 ENDS
END SUB2
ATART
在上述两个程序模块汇编、连接后,准备从START处开始执行。但在汇
编连接期间出现语法错误,为使上述两程序模块能正确汇编、连接并执行,试 修改和补充有关语句。
4.16、指出下列程序中哪几条语句有语法错误,并指出是什么错误(如符号有没有定义) 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
指令语句
DATA SEGMENT
VAR1 DB 0, 3, 5H, 0B7H VAR2 DB 12H, A4H, 5BH VAR3 DB “ABCDEFGHIJ”
VAR4 DW 1234H,”XY”, 0ACDH, 87H VAR5 DB DUP (?) DATA ENDS STACK1
SEGMEND PARA STACK
DW 10H DUP (0) STACK1 COSEG
ENDS SEGMENT
ASSUME CS: COSEG, DS: DATA,SS: STACK1 MOV MOV LEA
BX, DATA DS, BX SI, VAR5
START
16 17 18 19 20 21 22 23 24 25
MOV MOV MOV SHL ADD MOV MOV INT ENDS END
BX, OFFSET VAR3 AX,VAR1+2 [SI],0ABH AX, 3 VAR1, VAR2+2 [BX], [SI] AH, 4CH 21H
CODE
START
4.17、试用段定义伪指令编制一个小练习程序。待程序调试通过后,试对下列情况作一试验,观察它们在汇编、连接、调试时有何变化? ⑴、在组合类型中没有指定”STACK?的段;
⑵、有2~3个数据段组合类型中分别设置PUBLIC和COMMON; ⑶、在定位类型中有的段设置为WORD或BYTE。