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。
你的问题基本上归结为:
我如何移动
al到ax.
答案是你不要移动它,它已经在那里了。16 位ax寄存器由两个 8 位寄存器ah和al:
______________ 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.