8086汇编语言习题解答

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

8086/8088汇编语言习题解答
第一章
、试根据自己使用计算机的经历,列举几个必须使用或最好是使用汇编语言编制程序的事例。

、试完成下列数制间的转换
⑴、十进制数转换为8位二进制数
十进制:100 对应二进制:01100100B
十进制:56 对应二进制:00111000B
十进制:111 对应二进制:01101111B
十进制: 120 对应二进制:01111000B
;
十进制: 70 对应二进制:01000110B
⑵、8位二进制数(无符号数)转换为十进制数
二进制:01010101B 对应十进制:85
二进制:B 对应十进制:170
二进制:B 对应十进制:240
二进制:00001111B 对应十进制:15
⑶、十进制数转换为十六进制数
十进制:40 对应二进制:00101000B
十进制:80 对应二进制:01010000B
十进制:105 对应二进制:01101001B
;
十进制: 114 对应二进制:01101101B
十进制: 207 对应二进制:B
、试把下面用补码表示的二进制数转换为对应的十进制真值
二进制补码:01111000 对应的十进制值数真值:+120
二进制补码:对应的十进制值数真值:-39
二进制补码:对应的十进制值数真值:-127
二进制补码:对应的十进制值数真值:-120
二进制补码:00100111 对应的十进制值数真值:+39
二进制补码:对应的十进制值数真值:-16

、由键盘输入字符通常都是以该字符的ASCII码形式表示的。

若现在从键盘上输入十六进制数0~F,那么应如何处理才能把十六进制转换为4位二进制数0000~1111.
答:将键盘输入的数0~F的ASCII码,每输入一个字符,减去30H后,再存入内存,这样就完成了把从键盘上输入的十六进制ASCII码转换为4位二进制数0000~1111.
、试分别判断下列各组数据中哪个数据最大哪个最小
①、A= B=0,101D C=0,101H
②、A=1011B B=1011D C=1011H
答:第①组:A=1×21-+1×23-=
B=
C=1×161-+163-=+=
所以A最大,C最小
)
第②组,B最大,A=B最小
、现有一个二进制数.若将该数看着是无符号数、原码表示的带符号数、补码表示的带符号数,它对应的十进制数的真值是多少
答:.的无符号数的十进制是:+182;
.的原码带符号数的十进制是:-54
.补码表示的带符号数的十进制是:+74
、下列各组数据均为十进制数,先将各数据转换为补码表示的带符号数,然后用补码的加减运算分别完成下列各小题,并用十六进制数形式回答运算结果。

①、58+36 ②、(-58)+36 ③、58+(-36)④、(-58)+(-36)⑤、
58-36 ⑥、(-58)-36 ⑦、58-(-36)⑧、(-58)-(-36)
答:①、58+36的运算结果是:00111010+00010100=01001110=01011110
②、(-58)+36的运算结果是:+00010100==-000101001
③、58+(-36)的运算结果是:00111010+=00010110
|
④、(-58)+(-36)的运算结果是:+=
⑤、58-36的运算结果是:00111010+=00010110
⑥、(-58)-36的运算结果是:+=
⑦、58-(-36)的运算结果是:00111010+00010100=01001110=01011110
⑧、(-58)-(-36)的运算结果是:+00010100==-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:奇遇标志
AF:辅助进位标志ZF:零值标志
SF:符号位标志TF:单步标志
IF: 中断允许标志DF:方向标志
OF:溢出标志
.
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 ;EA=段基值+DISP=12000H+0345H=12345H

2.6、假设某用户程序装入内存后,(SS)=0950H,(SP)=64H,试问该用户程序的堆栈底部(字单元)物理地址是是多少
2.7、设堆栈段寄存器(SS)=3E4BH,程序中设置堆栈长度为200个字节。

试计算出堆栈底部字单元物理地址,堆栈指针SP初始值(即堆栈中没有数据时)和SP初始值指向的物理地址。

2.8、设某用户程序(SP)=30H,(AX)=1234H,(DS)=5678H。

如现有两条指令:
PUSH AX
PUSH DS
试问两条指令执行后,图中各单元的数据是多少
(SP)=
答: (SP)=30H-4H=2CH
2.9、在IBM-PC微机上,分别进行下列8位二进制数的运算后,标志寄存器中OF、ZF、SF、CF的值各是多少

①、+01010101 ②、+
③、0110 ④、0010
2.10、设(SP)=50H
PUSH AX
PUSH BX
PUSH CX
执行上述三条指令后,(SP)= 44H。

2.11、设(SP)=6EH
POPF
POP AX

执行上述两条指令后,(SP)= 72H 。

第三章
、试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:
①、AND AX,0FFH ;立即数寻址
②、AND BL,[0FFH] ;直接寻址
③、MOV DS,AX ;寄存器寻址
④、CMP [SI],CX ;寄存器间接寻址
⑤、MOV DS:[0FFH],CL ;带前缀的直接寻址
⑥、SUB [BP][SI],AH ;基址变址寻址

⑦、ADC AX,0ABH[BX] ;基址寻址
⑧、OR AX,-35[BX][DI] ;基址变址寻址
⑨、PUSH DS ;寄存器寻址
⑩、CMC ;立即数寻址
、试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错误。

①、MOV [BX][BP],AX ;错,BX与BP必须二选一
②、TEST [BP],BL ;正确
③、ADD [SI],DA_BYTE ;错,源目操作数不能同时为存储器
④、AND DH,DL ;错,同一寄存器高、低字节不能与

⑤、CMP CL,1234H ;正确
⑥、SHR [BX][DI],3 ;正确
⑦、NOT CX,AX ;错,NOT指令只有一个操作数
⑧、LEA DS,35[SI] ;正确
⑨、INC CX,1 ;正确
⑩、PUSH 45[DI] ;正确
、下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态
MOVDL,,86
ADDDL,0AAH
答:以上两条指令执行后:
`
CF=
AF=
ZF=
SF=
OF=
、在8086/8088CPU中可用于作地址指针的寄存器有哪些
答:
、已知(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H (CX)=5678H,(BP )=0024H,(SI)=0012H,(DI)=0032H,单元(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH 下各指标令或程序段分别执行后的结果如何
①、MOV CL,20H[DI][SI]
(
②、MOV [BP][DI],CX
③、LEA BX,20H[BX][SI]
MOV AX,2[BX]
④、LDS SI,[BX][DI]
MOV [SI],BX
⑤、XCHG CX,32H[BX]
XCHG AX,[SI]
、已知(SS)=0915H,(DS)=0930H,(SI)=0A0H,

(DI)=1C0H,(BX)80H,(BP)=470H.现有一指令
“MOV AX,OPRD”,若源操作数的物理地址为095C0H,试用4种不同寻址方式该写此指令(要求上述每个已知条件至少要使用一次)。

、已知(DS)=1234H,(SI)=124H,(12464H)=30ABH,(12484H)=464H LEA SI, [SI]
MOV AX, [SI]
MOV [SI+22H], 1200H
LDS SI, [SI+20H]
ADD AX, [SI]
上述程序执行后:(DS)= ,(SI)= (AX)= ,
、已知(AX)=0A5C6H,(CX)=0F03H,CF=1
RCL AX, CL
AND AH, CH
RCR AX, CL
上述三条指令执行后:(AX)=,CF=。

、已知(AX)=0FC77H,(CX)=504H,CF=1
SAR AX, CL
XCHG CH, CL

SHL AX, CL
上述三条指令执行后:(AX)=,CF=。

、已知(AX)=1234H
MOV BX, AX
NEG BX
ADD AX, BX
上述三条指令执行后:(AX)=(BX)=。

]
、已知(AX)=4321H
INC AX
NEG AX
DEC AX
NEG AX
上述几条指令执行后:(AX)=
、已知(AX)=0A33AH,(DX)=0F0F0H
AND AH,DL
XOR AL,DH
NEG AH

NOT AL
上述几条指令执行后:(AX)=
、已知(AX)=0FF60H,CF=1
MOV DX,96
XOR DH,0FFH
SBB AX,DX
上述几条指令执行后:(AX)=,CF=。

、试按下列要求分别编制程序段:
①、把标志寄存器中符号位SF置’1’

②、寄存器AL中高低4 位相互换
③、由寄存器AX ,BX组成一个32位带符号数(AX 中存高16位,试求这个数的负数)
④、现有三个字节存储单元A、B、C。

在不使用ADD和ADC指令的情况下,实现(A)+ (B)送C。

⑤、用一条指令把CX中的整数转变成奇数(若原来是奇数,则CX看数据不变;若原来是偶数,则(CX )+1形成奇数。

⑥、根据AX中有0的位对BX中对应位变反,其余各位保持不变
、试给出下列各指令的机器目标代码:
①、MOV BL,12H[SI]
②、MOV 12H[SI],BL
③、SAL DX,1
④、ADD 0ABH[BP][DI],1234H
*
第四章
、已知下列程序段
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
、某数据段中有
COUNT1 EQU 16H
(
COUNT2 DW 16H
下面两条指令有何异同:
MOV AX, COUNT1
MOV BX, COUNT2
答:AX:0016H, BX=1084H
COUNT1 EQU 16H 是赋值语句
MOV BX, COUNT2是定义的地址指针,在1084H中才放字16H.
、下面各题中有语法错误,试分别用两种办法修改题中语句,使它们在汇编时都能分别获得通过:
⑴、M1 DW 5060H
&
MOV BL,M1
⑵、M2 E QU 10H
MOV M2,AL
⑶、M3 D W ‘ABCD’
⑷、M4 D B 1234
⑸、DATA1 SEGMENT
DA1 D W 1234H
%
DATA1 ENDS
DATA2 SEGMENT
DA2 DW 5678H
DATA2 ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA1 MOV BX,DA2
CODE ENDS
&
、设已定义数据段:
DATA SEGMENT
DA1 DB XX, XX
DA2 DB XX, XX
ADRR DW DA1, DA2
DATA ENDS
为使ADRR+2字存储单元中存内容为0022H,上述方框中应填写什么语句
、下面的程序段中,有数据为3000H的字存储单元有几个它们的偏移量分别是多小

ORG 30H
DA1 DB 0, ’0’, 30H, 0, 30H
DW DA1
、下面的语句中有数据0102H的字存储单元有多少
DB 10H DUP(1,2 DUP(2))
、下述指令执行后,寄存器DS和SI的内容分别是多少
ADDR DW 1234H, 5678H, 0ABCDH
LDS SI,ADDR+1
'
、设某数据段为:
DATA SEGMENT
ORG 20H
NUM1=8
MUM2=NUM1+10H
DA1 DB ‘IBM PC’
DB 0AH,0DH
CUNT EQU $=DA1
DA2 DW ‘IB’,’M’,’PC’,0A0DH
DATA ENDS
^
上述数据段定义后,DA1和DA2的偏移量,CUNT的值以及DA2+5字节单元的内容分别是多少
、某源程序有如下数据段:
DATA1 SEGMENT WORD PUBLIC
DA1 DB 20H DUP(0)
DATA1 ENDS
DATA2 SEGMENT PAGE PUBLIC
DA2 DB 20H DUP(0)
DATA2 ENDS
设DA1物理地址是134CEH,那么DATA2段基值,DA2的偏移量分别是多少、下述程序段执行后,寄存器AX,BX和CX的内容分别是多少
(
ORG 0202H
DA_WORD DW 20H
MOV AX, DA_WORD
MOV BX, OFFSET DA_WORD
MOV CL, BYTE PTR DA_WORD+1
MOV CH, TYBE DA_WORD
、下述程序段执行后,寄存器BX和CX的内容分别是多少
NUM1=20*20
NUM2 EQU 400H

REL1 DW NUM1 LE NUM2, EQ NUM2
MOV BX, REL2
MOV CX, WORD PTR REL2
、下述程序段执行后,寄存器AX和BX的内容分别是多少
NUM EQU 945H
ALPH=35*27
MOV AX, ALPH LE NUM
&
MOV BX, ALPH GT NUM
、下述语句汇编后,$+20H和$+40H中的$值分别是多少
ORG 34H
DA1 DB 10H,$+20H,30H,$+490H
DA2 DA1 + NUM + 40H
、试用数据定义语句DW改写下述语句,使它们在存储器中有完全相同的存储情况。

DA1 DB ‘ABCDEFGHI’
DA2 DB 12H, 34H, 56H,7 8H, 9AH, 0BCH
?
、现有两个程序摸块:
TITLE PROC TITLE PROC2
DATA1 SEGMENT DATA2 SEGMEND
DA1 DB 10H DUP(0) DA2 DW 10H D UP(0)
DATA1 ENDS DATA2 ENDS
CODE1 SEGMENT CODE2 SEGMENT
ASSUME CS: CODE1 ASSUME CS: CODE2
ASSUME DS: DATA1 ASSUME DS: DATA2
]
START: SUB2 PROC FAR
MOV DX, DA2+2 MOV AL, DA1+2
CALL SUB2 RET
SUB2 ENDP
CODE1 ENDS CODE2 ENDS
END ATART END SUB2
在上述两个程序模块汇编、连接后,准备从START处开始执行。

但在汇编连接期间出现语法错误,为使上述两程序模块能正确汇编、连接并执行,试修改和补充有关语句。

、指出下列程序中哪几条语句有语法错误,并指出是什么错误(如符号有没有定义)
序号指令语句
1 DATA SEGMENT
2 VAR1 DB 0, 3, 5H, 0B7H
3 VAR2 DB 12H, A4H, 5BH
4 VAR3 DB “ABCDEFGHIJ”
5 VAR4 DW 1234H,”XY”, 0ACDH, 87H
6 VAR5 DB DUP ()
7 DATA ENDS
8 STACK1 SEGMEND PARA STACK
9 DW 10H DUP (0)
10 STACK1 ENDS
11 COSEG SEGMENT
12 ASSUME CS: COSEG, DS: DATA,SS: STACK1
13 START MOV BX, DATA
14 MOV DS, BX
15 LEA SI, VAR5
16 MOV BX, OFFSET VAR3
17 MOV AX,VAR1+2
18 MOV [SI],0ABH
19 SHL AX, 3
20 ADD VAR1, VAR2+2
21 MOV [BX], [SI]
22 MOV AH, 4CH
23 INT 21H
24 CODE ENDS
25 END START
、试用段定义伪指令编制一个小练习程序。

待程序调试通过后,试对下列情况作
一试验,观察它们在汇编、连接、调试时有何变化
⑴、在组合类型中没有指定”STACK’的段;
⑵、有2~3个数据段组合类型中分别设置PUBLIC和COMMON;
⑶、在定位类型中有的段设置为WORD或BYTE。

相关文档
最新文档