一:王爽 汇编语言 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
很久以前做的,不知道对不对,好长时间没看那本书了。我的是第二版!
二:王爽汇编语言的检测点 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。
希望能对你有所帮助!
三:汇编语言第二版检测点10.3 为什么不是1012
……
S: POP AX ;AX = 0008
ADD AX, AX ;AX = 0010
POP BX ;BX = 1000
ADD AX, BX ;AX = 1010
RET----应该有这句
END
四:汇编语言检测点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的去执行了!
五:汇编语言 检测点求解答。。
第一个对的
数据段20憨00H
栈段10000h 这个你懂吧,其实他就是把10000H-1000FH设置为一个栈段,把他们一个一个压出栈。
pop[e]就是把栈段里面1000:[0](栈顶)中的一个字压出栈,压到2000[e]中,依此类推。
六:王爽汇编语言检查点10.5(2)结果不理解?
call dword ptr ss:[0]
执行这句过后ss:[0eh]=cs ss:[0ch]= nop的偏移 nop为1字节
也就是相当于nop的地址减s的地址 cs是相等的所以为零 偏移相差为1。
七:关于王爽汇编语言检测点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),这个我就想不通了(也不想多往这方面想)。
我说的并不一定是“真相”,但至少是我自己思考过的。
九:王爽《汇编语言》检测点9.1第二题,mov [bx+2],cs这一步有什么意义呀
你仔细看下jmp dword的功能:从内存单元处存放着两个字,高地址处的字是目标转移段地址,低地址是偏移地址。这下应该明白了吧?所以最后一步是存放段地址
十:汇编语言 检测点14.2 求大神 10分
code segment assume cs:code org 100hstart:jmp beginx dw 234begin:push cs pop ds push cs pop es mov ax,x sal ax,1 mov bx,ax sal ax,1 sal ax,1 add ax,bx call dispaxs mov ah,4ch int 21h ;========================================= ; 将要显示的有符号数置于 ax 中 DISPAXS PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP PUSH DS PUSH ES PUSHF PUSH CS POP DS PUSH CS POP ES MOV CX,6 LEA DI,DISPAXSS @DISPAXS: MOV BYTE PTR [DI],32 INC DI LOOP @DISPAXS PUSH AX MOV DL,32 MOV AH,2 INT 21H POP AX MOV BYTE PTR NZS,0 MOV BYTE PTR SIGNS,0 CMP AX,0 JGE @DISPAXS0 MOV BYTE PTR SIGNS,1 NEG AX @DISPAXS0: PUSH AX LEA SI,DIVARRS LEA DI,DISPAXSS INC DI MOV CX,5 @DISPAXS1: POP AX MOV DX,0 MOV BX,[SI] ......余下全文>>