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位二进制数的运算后,标志寄