我有一个关于非常低级的事情的问题。我们正在分析微处理器如何执行简单的汇编程序,我们正在使用逻辑分析仪,所以我有 .law 文件。这是我们使用的代码(在我放置操作码的注释中):
mov ax, 1000
mov ds, ax
mov bx, 2000
mov ax, 0aa
mov cx, 100
petla
push cx ;51
mov [bx],al ;8807
mov ax,[bx] ;8B07
inc al;FEc0
pop cx;59
loop ;here goes address
我们在调试程序中编写它,组装并观察输出。这是图像:
http://img805.imageshack.us/img805/241/mikro.png
现在,这是奇怪的(至少对我而言)事情:
Data bus:51 - push cx
Data bus:8807 - mov [bx],al
Data bus:0001 - writing to 1EF6A
Data bus:8B07 - mov ax,[bx]
Data bus AA, address bus:12000 - that is writing al to [bx] (ds - 1000, bx - 2000)
突然间,他将 CX 寄存器中的值写入内存中的某个位置(我怀疑 1EF6A 是 SS:SP 的物理地址)。是不是因为
push CX?
如果是,他为什么在
mov [bx],al
为什么写给 [bx] 的时间这么晚?
我在想应该在推送指令之后立即将值推送到堆栈。