一:王爽 汇编语言 11.1检测点答案
sub al,al zf=1,pf=1,sf=0
mov al,1 zf=1,pf=1,sf=0
push ax zf=1,pf=1,sf=0
pop bx zf=1,pf=1,sf=0
add al,bl zf=0,pf=0,sf=0
add al,10 zf=0,pf=1,sf=0
mul al zf=0pf=1,sf=0
很久以前做的,不知道对不对,好长时间没看那本书了。我的是第二版!
二:关于王爽汇编语言检测点6.1的问题的答案解惑 5分
第一个程序:答案是可以的。
解释:我们在前边用dw 0,0,0,0,0,0,0,0,0,0,0只是申请了十个内存单元的空间,在后边将其指定为堆栈时并不一定要用完。多余的两个内存单元里边仍然存储着0,只不过不属于栈的范围;
第二个程序:程序运算过程是这样的:
因为在整个循环体执行过程中ss,ds寄存器中的数是不变的,只有sp和bx在变,也就是栈顶位置和内存单元指针DS:[bx]在变。所以我们只观察sp和bx的变化。
第一次循环:初始时(sp=36,bx=0;)
1.执行push(sp=sp-2=34,bx=0);
2.执行pop(sp=sp+2=36,bx=0);
3.执行add(sp=36,bx=2);
第二次循环:
1.执行push(sp=sp-2=34,bx=2);
2.执行pop(sp=sp+2=36,bx=2);
3.执行add(sp=36,bx=4);
所以此程序一会入栈一会出栈,栈顶就在SS:34和SS:36之间不断切换,只有寻址内存单元0:0~0:15单元的指针DS:[bx]在不断增长,直到访问至0:14结束。
三:关于王爽汇编语言检测点13.1(01),求正确答案及详细说明. 20分
楼主,我是这样想的:
按常理来说应该是16位的最大值FFFFH,因为这是一个内存字单元。但是书上说了:用bx储放转移位移,如果说(bx) = FFFFH的话,执行add [bp+2],bx时就会产生进位溢出,从而不能跳转到标号s处;因为原来ss:bp+2处的字型数据为offset se,因此有max( (bx) + offset se ) = FFFFH,从而有max(bx) = FFFFH - offset se。
我比较纠结的是,题里所说的“转移位移”到底是指bx还是指add [bp+2],bx后(即“模拟loop指令”的转移位移)的,所以有了上边的两种答案。
我也看了一些其他的答案,有说FFFFH的,这个还好明白些。不过最多的答案还是8000H~7FFFH 即(-32768~32767),这个我就想不通了(也不想多往这方面想)。
我说的并不一定是“真相”,但至少是我自己思考过的。
四:汇编语言检测点10.5求解
stack segment
dw 8 dup (0)
stack ends
申明了一个栈段 分配大小是 8个DW 大小的空间 并且全部初始化为 0
ds==ss==stack segment的首地址
call word ptr ds:[0eh] ;call 的是stack segment首地址+0eh 单元中的内容作为地址(为初始化时的0)调用,即call 了一个地址为0的去执行了!
五:王爽汇编语言的检测点 12.1
8086系统在存储器的最低1KB区域(00000H~003FFH)建立一个中断向量表,存放256个中断类型的中断向量。这1024个单元被分成256组,每组包括4个字节单元,存储一个中断向量的段基址和段内偏移地址,高2个字节用於存放段基址,低两个字节用於存放段内偏移地址。
8086系统把中断向量表中的中断明确分为3个部份:
1.专用中断:类型号0~4(所以中断不是从1开始,而是0)
2.系统备用中断:类型号5~31H
3.用户中断:类型号32H~0FFH
检测点12.1分析:
计算中断服务入口地址的方法是:从内存地址为中断类型码*4和中断类型码*4+2的两个字单元中读取中断处理过程的入口地址设置IP和CS
0000:0000 68 10 A7 00 8B 01 70 00-16 00 9D 03 8B 01 70 00
段基址:偏移地址 0 1 2 3锭4 5 6 7 8 - 9 10 11 12 13 14 15(16个bytes,“-”为分隔符,每8个bytes分隔一次)
0号:00A7:1068
1号:0070:108B
2号:039D:0016
3号:0070:108B
3号:IP读取3*4=12的两个bytes就是12和13两个bytes,CS读取3*4+2=14的两个bytes就是14和15两个bytes。
希望能对你有所帮助!
六:王爽汇编语言检测点2.1
(1)写出每条汇编指令执行后相关寄存器中的值。
第一空:F4A3H;<--把十进制数62627变成十六进制就是结果F4A3H
第二空:31A3H;<--ah=31h,al不变,所以ax=31A3H
第三空:3123H;<--al=23h,ah不变,所以ax=3123h
第四空:6246H;<--ax=ax+ax=3123h+3123h=6246h,用计算器算一下结果就出来了
第五空:826CH;<--bx=826CH,ax不变
第六空:6246H;<--cx=ax=6246H
第七空:826CH;<--ax=bx=826CH
第八空:04D8H;<--ax=ax+bx=826CH+826CH=04D8H,0前面还有个1,但是ax放不下,所以丢弃,16位寄存器只能放下四位十六进制数
第九空:0482H;<--al=bh=82h,ah不变
第十空:6C82H;<--ah=bl=6Ch,al不变
第十一空:D882H;<--ah=ah+ah=6Ch+6Ch=D8h,al不变
第十二空:D888H;<--al=al+6=82H+6=88h,ah不变
第十三空:D810H;<--al=al+al=88h+88h=10h,ah不变,结果是110h但al的大小只有8位二进制位,能放下的最大数为FFh,所以高位丢弃,只保留低两位
第十四空:6246H ;<--ax=cx=6246H
七:汇编语言1.1监测点问题求解答
应该是2的16次方字节(byte),而不是2的16次方位(bit)。
20个地址线的为1M字节;
24个地址线的为16M字节;
32个地址线的为4G字节;
八:王爽《汇编语言》检测点9.3的一道题
2000:0段的内存为0B 0E 00 01时,当bx=2时,
mov cl,[bx]
mov 锭h,0
后,cx=0;执行inc cx和inc bx后,cx=1,bx=3,loop s语句执行后退出循环。接着执行OK标号处的程序。因bx比真正的偏移地址多加了1,故OK标号处先将bx减1再存储在DX中
九:汇编语言第二版检测点10.3 为什么不是1012
……
S: POP AX ;AX = 0008
ADD AX, AX ;AX = 0010
POP BX ;BX = 1000
ADD AX, BX ;AX = 1010
RET----应该有这句
END
十:王爽 汇编语言检测点3.1第一题
AX=2662,BX=D6E6,AX=2662,AX=2662,胆X=2ECC,AX=563E,AX=56F9