eminemjjk 发表于 2012-2-26 22:36:23

困苦啊

检测点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
详细解释下代码段的内容意思

非同凡想 发表于 2012-2-26 22:36:24

本监测点目的是让我们理解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的值,所以……

eminemjjk 发表于 2012-2-26 22:43:40

还有第三题也有问题,程序错误不说,cs ip的值是不是也是错误的

Push 发表于 2012-2-27 20:07:31

jmp 死掉....

风剑河 发表于 2012-2-27 22:27:11

程序的第一条指令不就是代码段的第一条指令吗?代码段的段地址是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]
查看完整版本: 困苦啊