1.
assume cs:code
data segment
?
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1]
ocde ends
end start
若要使程序中的JMP指令执行后,CS:IP指向程序的第一条指令,在DATA段中应该定义 db ?,0,0,?,?,?,?,?... ?处可定义任意数据第二,三字节必须为0
2.
assume cs:code
data segment
dd 12345678h
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov [bx],____
mov [bx+2],____
jmp dword ptr ds:[0]
code ends
end start
补全程序,使JMP指令执行后,CS:IP指向程序的第一条指令
mov [bx],0
mov [bx+2],cs
3.
用DEBUG查看内存,结果如下:
2000:1000 be 00 06 00 00 00 ....
则此时,CPU执行指令:
mov ax,2000h
mov es,ax
jmp dword ptr es:[1000h]
后, (cs)=?,(ip)=?
(cs)=0006h (ip)=00beh
- [tinyparticle] 不错,思路清晰 09/29 21:22
- [wsrf] 正确。 09/16 09:22
- [wsrf] 这个用DEBUG查看一下程序所占字节数就可以了,没有必要把每条指令所占字节数都记住,博主的做法是正确 09/16 08:22
- [tinyparticle] 取cx=0(cx取0-ffffh所占字节数是一样的),进debug查看程序总长度。提示:查看书P91 09/11 20:07
- [huibian2009] 呵呵,逻辑错误就是在编译的时候可以通过,但在执行的过程中会发生错误。 09/10 11:39
- [huibian2009] 呵呵,这道题考查的是对栈空时栈顶的设置,可以参考教程上关于栈的相关章节。这道题应该是选第1个。 09/09 08:37
- [911911] 谢谢已改正 09/08 15:51
- [wsrf] (1)说修改的内容的时候应该是从高字节到低字节写起。如内存单元220FE存储的字为5CCA,而不应该 09/08 08:53
- [911911] 改正了, 特意看了看前面章节的举例 才发现举的DEBUG操作时 数据是不加H的 写段程序指令时数据都 09/07 11:26
- [mywiil] debug下默认的就是16进制,所以不用加H,但是源代码中是需要加H的,因为源程序在编译的时候,数据 09/07 09:12