鱼C论坛

 找回密码
 立即注册
查看: 71|回复: 2

[汇编作业] 检测点 9.1

[复制链接]
发表于 前天 23:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 tyyfly 于 2025-4-13 23:25 编辑

(1) 程序如下

  1. assume cs:code
  2. data segment
  3.         ?
  4. data ends
  5. code segment
  6.         start: mov ax,data
  7.                 mov ds,ax
  8.                 mov bx,0
  9.                 jmp word ptr [bx+1]
  10. code ends
  11. end start
复制代码

若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?
A: db 0,0,0 / db 3 dup (0) / dw 2 dup (0) / dd 0

(2)程序如下

  1. assume cs:code
  2. data segment
  3.         dd 12345678H
  4. data ends
  5. code segment
  6.         start: mov ax,data
  7.                 mov ds,ax
  8.                 mov bx,0
  9.                 mov [bx],      (1)      
  10.                 mov [bx+2],      (2)      
  11.                 jmp dword ptr ds:[0]
  12. code ends
  13. end start
复制代码

补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
A: (1) 0000h / word ptr 0 / offset start (2) cs

(3) 用debug查看内存,结果如下:
2000:1000 BE 00 06 00 00 00 ......
则此时,CPU执行指令:
  1. mov ax,2000H
  2. mov es,ax
  3. jmp dword ptr es:[1000H]
复制代码
A: CS=0006h , IP=00BEh


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 23:26 | 显示全部楼层
检测点9.1 解答

(1) 答案分析  
程序中的 jmp word ptr 需要跳转到第一条指令 mov ax,data。  
由于是段内跳转(仅修改IP),数据段需提供目标偏移地址 0。  
所有选项均会在内存中生成前两个字节 00 00,满足 IP=0 的条件。  

正确答案:  
      
  • A: db 0,0,0  
  • A: db 3 dup (0)  
  • A: dw 2 dup (0)  
  • A: dd 0  
  

(2) 补全程序  
目标是通过 jmp dword ptr 跳转到第一条指令。需将 IP=0CS=当前代码段值 存入数据段:  
  1.   
  2. (1) mov [bx], 0        ; 将IP设为0  
  3. (2) mov [bx+2], cs     ; 将CS设为当前代码段值  
复制代码


正确答案:  
      
  • (1) 填 0000hword ptr 0  
  • (2) 填 cs  
  

(3) Debug内存解析  
内存 2000:1000 处的数据为小端存储:  
  1.   
  2. BE 00 → IP=00BEh  
  3. 06 00 → CS=0006h  
复制代码

执行 jmp dword ptr es:1000 后:  
CS=0006h,IP=00BEh  

正确答案:  
CS=0006h, IP=00BEh

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 23:27 | 显示全部楼层
检测点9.1 答案  

(1)问题答案  
data段需要定义一个值为0的字类型数据。  
正确选项:  
      
  • db 0,0,0(前两个字节为0)  
  • db 3 dup (0)(前两个字节为0)  
  • dw 2 dup (0)(两个0字)  
  • dd 0(低字为0)  
  

关键分析:  
jmp word ptr 是段内跳转,只需IP=0(指向第一条指令)。data段需在目标地址处提供两个字节的0。  

----------------------  

(2)问题答案  
补全代码:  
  1.   
  2. mov [bx], 0       ; (1) 存入IP=0000h  
  3. mov [bx+2], cs    ; (2) 存入CS的值  
  4. jmp dword ptr ds:[0]  
复制代码


关键分析:  
jmp dword ptr 是段间跳转,需从内存读取双字(低字IP=0,高字CS=当前代码段)。  

----------------------  

(3)问题答案  
执行结果:  
      
  • CS=0006h  
  • IP=00BEh  
  

关键分析:  
内存 2000:1000 处数据为 BE 00 06 00(小端模式):  
IP=00BEh(取自前两个字节),CS=0006h(取自后两个字节)。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-15 16:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表