【发布时间】:2019-02-13 13:56:07
【问题描述】:
我是汇编编程的初学者,我遇到了这个问题的一些问题。所以下面命令的地址是由CS:IP registers 的内容定义的。如果CS 等于 0750h 并且IP 是 047Bh 查找所有命令的地址。假设所有命令的大小为 3 个字节。
我发现地址等于segment * 10h + offset。这意味着 0750h * 10h + 047Bh = 797Bh。之后为了找到每个命令的地址,我只需将 3 添加到 797Bh?我说的对吗?
start:
mov ax, data
mov ds, ax
mov al,3Fh
mov ah,30h
cmp al,ah
jl p1
add ah,al
sub ah,30h
p1:
add al,ah
sub al,30h
mov ax, 4c00h
int 21h
ends
【问题讨论】:
-
是的,应该没问题。
-
@Jester 即使我有跳转 3 字节添加到 797B?
-
就术语而言,它们被称为指令,而不是命令。给定 CPU 支持的指令集合称为该 CPU 的指令集。每条指令都由汇编器翻译成机器语言,这是CPU实际在内存中解释的一个或多个字节,IP指向用于获取和执行。每条指令所需的字节数取决于指令和该指令具有的参数类型。这记录在 CPU 的指令集参考手册中。
-
假设所有命令的大小都是 3 个字节。我认为您显示的代码中的所有指令都不是这样。例如,
add al,ah是一个 2 字节指令。请参阅本表第 26 页开始:Intel 8086 Microprocessor Data Sheet -
@prl
sub ah, 30h指令也是 3 字节指令。
标签: assembly x86-16 instructions emu8086