汇编将 al 寄存器值移入 ax

Ken*_*oto 1 assembly x86-16 emu8086

我对程序集完全陌生,在搜索之后我仍然对寄存器有一些疑问。目前我正在尝试通过执行以下操作一遍又一遍地划分值:

1.将 ax 与 bl 相除(似乎余数去 ah,商去 al)

2.move al(quotient) to ax

3. 如果 ax 小于或等于 0,则跳转到 5

4.跳到1

5.结束

问题出现在指令 2 上,因为我试图将 8 位值移动到 16 位值。有人知道如何解决问题吗?

我使用的是 emu8086,所以寄存器只有 x、h 和 l。

pax*_*blo 5

你的问题基本上归结为:

我如何移动alax.

答案是你不要移动它,它已经在那里了。16 位ax寄存器由两个 8 位寄存器ahal

  ______________ ax ______________
 /                                \
+-+-+-+-+-+-+-+-+  +-+-+-+-+-+-+-+-+
|f|e|d|c|b|a|9|8|  |7|6|5|4|3|2|1|0| <- individual bits
+-+-+-+-+-+-+-+-+  +-+-+-+-+-+-+-+-+
 \____    _____/    \_____    ____/
       ah                  al
Run Code Online (Sandbox Code Playgroud)

如果你想确保整体ax就被设置成是al,你只需要清除ah一部分,是这样的:

and ax, 0ffh
Run Code Online (Sandbox Code Playgroud)

这将清除除最低(最右侧)八位之外的所有位,有效地将该f..8区域设置为全零,从而确保ax变为al.