8086汇编语言习题解答 下载本文

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。