Assembly 从寄存器和地址中移动值
我试图解决emu8086中的无限循环,但无法理解操作背后的逻辑Assembly 从寄存器和地址中移动值,assembly,emu8086,Assembly,Emu8086,我试图解决emu8086中的无限循环,但无法理解操作背后的逻辑 start: mov di, ds:1234h mov bx, [di] mov ax, [bx] cmp ax, 3 jnz short start 有人能帮我理解所有内存移动之间的逻辑吗?让我们假设以下是寄存器和内存的内容: DS存储0700 DS:1234h存储5 5存储2 2存储3 现在是声明 mov di, ds:1234h 将
start:
mov di, ds:1234h
mov bx, [di]
mov ax, [bx]
cmp ax, 3
jnz short start
有人能帮我理解所有内存移动之间的逻辑吗?让我们假设以下是寄存器和内存的内容:
DS
存储0700
DS:1234h
存储5
5
存储2
2
存储3
现在是声明
mov di, ds:1234h
将5
传输到di
。因为内存地址ds:1234h
(0700:1234h
)存储5
声明呢
mov bx, [di]
mov ax, [bx]
cmp ax, 3
jnz short start
将2
传输到bx
,因为di
指向的内存位置(5
)上的数据存储2
声明呢
mov bx, [di]
mov ax, [bx]
cmp ax, 3
jnz short start
将3
传输到ax
,因为di
指向的内存位置(2
)上的数据存储3
声明呢
mov bx, [di]
mov ax, [bx]
cmp ax, 3
jnz short start
将设置零标志(因为在本例中,ax
的内容与3
匹配)
最后是声明
mov bx, [di]
mov ax, [bx]
cmp ax, 3
jnz short start
如果未将零标志设置为标签
start
,则将跳转(在本例中,不会跳转,因为在前面的语句中设置了零标志)short
用于8位跳转(还有16位跳转称为近跳转,32位跳转称为远跳转) 逻辑的哪一部分很难理解?mov di,ds:1234h
不是有效的英特尔语法。我猜它将被编译为movdi[ds:1234h]
,但需要先检查反汇编才能知道它。。。在这种情况下,它将从[ds:1234h]
读取di
值,然后从[ds:di]
读取bx
值,最后从[ds:bx]
读取ax
值,即三个短*
指针取消引用如果(3!=(*(*(*(*ds:1234h)))转到开始
(如果您知道C)