困苦啊
检测点9.1 - 详细解答-《汇编语言》-课后题2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。完整程序如下:
assume cs:code,ds:data
data segment
dd 12345678h
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov ,bx ;源操作数bx为所填内容
mov ,cs ;源操作数cs为所填内容
jmp dword ptr ds:
code ends
end start
为什么填bx,cs
详细解释下代码段的内容意思
本监测点目的是让我们理解jmp dword ptr ds:指令的含义,其中ds:即内存单元地址。
这个指令的含义是跳转到到哪里呢?ds开始的内存处存放两个字的内容决定了跳转的位置。
其中 (CS)=内存单元地址+2;也就是说从ds:开始的0和1字节处(1个字,低地址)存放的内容为IP
(IP)=内存单元地址,也就是说从ds:开始的2和3字节处(1个字,高地址)存放的内容为CS
再结合题目,mov ,??? 那么问号处应为即将跳转到第一条指令的IP的值,因为是第一条指令,无疑IP应为0,所以……
mov ,???应为即将跳转到第一条指令的CS的值,所以……
还有第三题也有问题,程序错误不说,cs ip的值是不是也是错误的 jmp 死掉.... 程序的第一条指令不就是代码段的第一条指令吗?代码段的段地址是CS吧?该段的第一条代码的是从0开始的吧?要指向第一条指令就是指向cs:0000h吧? 该程序的转移指令是“ jmp dword ptr ds:”,对于转移地址在内存中的jmp指令,当用dword指定时,说明从ds:开始的两个字存放着转移目的地址,低地址存放的是目的的偏移地址,高地址存放的是目的的段地址。所以“ jmp dword ptr ds:”要达到指向cs:0000h的目的,那么(ds:)=0000h,(ds:)=(cs)才行。因为前面已经有mov bx,0,所以mov ,___就是mov ,____,所以此处填 bx就可以了,而mov ,___就是mov ,___,所以此处填CS
页:
[1]