请教,王爽《汇编语言》书的例子的问题。

SilentHunter460 2021-05-26 03:19:00
代码如下,代码要干什么我是懂的,但是这个题目问ax和bx最后的值是什么,其它什么信息都不给,好像无法计算。
比如 mov word ptr ss:[0], offset s 这是把s标号位置的的偏移地址放入ss:[0]内存,但是s标号的偏移地址是多少没说,我又不知道每句指令的机器码是多少,这个题就没法做了啊。

assume cs:code
data segment
dw 8 dup(0)
data ends
code segment
start: mov ax, data
mov as, ax
mov sp, 16
mov word ptr ss:[0], offset s
mov ss:[2], cs
call dword ptr ss:[0]
nop
s: mov ax, offset s
sub ax, ss:[0cH]
mov bx, cs
sub bx, ss:[0eH]
mov ax, 4c00H
int 21h
code ends
end start
...全文
779 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SilentHunter460 2021-05-27
  • 打赏
  • 举报
回复
引用 3 楼 zara 的回复:
这个题目不是这样理解的吧,S 的地址其实没有关系;最后的 ax 和 bx 是什么,是 s: 的完全地址和 ss:[0c-0f] 处内容的相减,ss:[0c-0f] 处是什么,应该是那个 call dword... 指令形成的返回地址吧,返回地址是哪里,是那个 nop 指令的地址啊,结果不就是这个 nop 指令的长度么。
谢谢回复。 我跟着模拟器一步步分析,每一句指令的作用都能理解。 但还是无法达到你的程度能一眼看清前后关系。
zara 2021-05-27
  • 打赏
  • 举报
回复
也不是一眼就看出来的,过程就是上面说的那样;要提升熟练度,就是要多看多练吧。
  • 打赏
  • 举报
回复
另外,如果单步调试的话是得不到正确结果的,因为单步的时候会占用栈空间
  • 打赏
  • 举报
回复
引用 2 楼 SilentHunter460 的回复:
[quote=引用 1 楼 早打大打打核战争 的回复:]因为没有用org指定起始地址,默认start的地址是code段0偏移,s的地址顺序可得

请问S的地址如何顺序可得?[/quote]

根据指令长度下推就得到了。
不过这题实际上与s的地址无关,最终ax=s的偏移减去nop指令的偏移=1,bx=cs-cs=0

zara 2021-05-26
  • 打赏
  • 举报
回复
这个题目不是这样理解的吧,S 的地址其实没有关系;最后的 ax 和 bx 是什么,是 s: 的完全地址和 ss:[0c-0f] 处内容的相减,ss:[0c-0f] 处是什么,应该是那个 call dword... 指令形成的返回地址吧,返回地址是哪里,是那个 nop 指令的地址啊,结果不就是这个 nop 指令的长度么。
SilentHunter460 2021-05-26
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
因为没有用org指定起始地址,默认start的地址是code段0偏移,s的地址顺序可得
请问S的地址如何顺序可得?
  • 打赏
  • 举报
回复
因为没有用org指定起始地址,默认start的地址是code段0偏移,s的地址顺序可得

21,497

社区成员

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

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