奥普瓯江 发表于 2018-6-30 15:53:49

检测点9.1

本帖最后由 奥普瓯江 于 2018-6-30 15:53 编辑

(1)程序如下
assume cs:code

data segment
      ?
data ends

code segment
start:mov ax, data
         mov ds, ax
         mov bx, 0
         jmp word ptr
code ends
end start
若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义那些数据

答:应该在data段中定义dw 0,dw每次在内存中申请2个字节的空间,所以jmp word ptr 一次取的是一个字2个字节是可以满足的
(2)程序如下
assume cs:code ds:data

data segment
   dd 12345678h
data ends

code segment
start: mov ax, data
      mov ds, ax
      mov bx, 0
      mov ,
      mov ,
      jmp dword ptr ds:
code ends
end start
补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令

答:mov , 0
      mov , cs
      内存中一共储存了2个字或称之为4个字节,jmp段间跳转,cs等于高位字节ip等于低位字节


(3)用Debug查看内存,结果如下:
2000:1000 BE00 06 00 00 00 ..........
则此时,CPU执行指令
mov ax, 2000h
mov es, ax
jmp dwordptr es:
后,(CS )= ?, (IP) = ?

答:(CS) = 0006,(IP)= 00BE

wanyiwan 发表于 2018-7-11 14:14:02

(1)jmp word ptr ,偏移的字单元是ds:和ds:。所以只要至少需要定义三个0

(2)应该是mov , bx,而不是mov , 0吧。操作数是立即数和内存单元需要显性指明要访问内存单元的长度
页: [1]
查看完整版本: 检测点9.1