如何补全这个指令,使jmp指令执行后,cs:ip指向程序的第一条指令

weirueii 2016-07-04 09:29:09
这是王爽的<<汇编>>第九章的监测点9.1的一个题目,感觉有点困难。如题,程序如下:

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

既然是要跳转,而且是dword ptr跳转,那就是cs=内存单元地址+2,ip是内存单元地址
所以第二个空应该填cs对吧
但是第一个空填什么呢? 如果要取得偏移量,就要用到offset伪指令。但是offset取得的东西需要知道size,如果我直接写

mov [bx],offset data

masm编译会报错,说是不知道这个操作数的size是多少,是byte还是word,还是dword。从[bx]看不出来。

那么这到底到底应该怎么填呢?
谢谢。
...全文
598 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
mov [bx],bx mov [bx+2],cs
baidu_23107797 2016-07-05
  • 打赏
  • 举报
回复
楼上的mov [bx], offset start Masm5.x不通过 Masm6.x通过
zara 2016-07-05
  • 打赏
  • 举报
回复
指向程序的第一指令,应该是 mov [bx], offset start 吧,与 data 无关的。
baidu_29183065 2016-07-05
  • 打赏
  • 举报
回复
程序第一条指令是start的位置吧 mov [bx],word ptr 0 mov [bx+2],cs mov [bx],word ptr 0 和 mov word ptr [bx],0 等价
weirueii 2016-07-05
  • 打赏
  • 举报
回复
2楼是正确的,因为最后一个jump,希望ip是0,也就是ds:[0]保存0,而mov [bx]是相当于往ds:[bx]中保存0,需要知道大小就用word ptr 0这个语句。 感谢!

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧