当前位置 : 主页 > 手机开发 > 无线 >

MASM Assembly将8位寄存器移动到16位寄存器(即mov cx,ch)

来源:互联网 收集:自由互联 发布时间:2021-06-10
我决定学习汇编编程语言.我正在使用 this.在底部练习它在一些指令中找到错误,其中一个是 mov cx, ch 我在SO上发现了一些类似的问题,解释了如何实现它,但现在我想知道为什么禁止这个操
我决定学习汇编编程语言.我正在使用 this.在底部练习它在一些指令中找到错误,其中一个是

mov cx, ch

我在SO上发现了一些类似的问题,解释了如何实现它,但现在我想知道为什么禁止这个操作?

假设我在CH中有10d = 00001010b并且想要将其置于CL并同时擦除CH. mov cx,ch似乎这样做是因为它将10d显示为16bit 00000000 00001010并将其分别放到CH和CL(整个CX)

有什么问题,为什么给定的教程要求在这个表达式中找到错误?

mov指令用于在相同大小的操作数之间移动.你想要的是将8位ch扩展为16位cx.有两个指令可用于此目的:

movzx cx,ch  ; zero-extends ch into cx. the upper byte of cx will be filled with zeroes
movsx cx,ch  ; sign-extends ch into cx. the upper byte of cx will be filled with the most significant bit of ch

在这种特殊情况下完成同样事情的另一种方法是:

shr cx,8  ; zero-extend
sar cx,8  ; sign-extend
网友评论