装配总和与不同大小的数字

时间:2011-03-21 22:52:11

标签: assembly x86

我可以在汇编中对不同的位(8位,16位)进行求和吗?

例如;

 sums proc near
 mov ax,0280h
 mov bh,30h
 mov ch,20h
 adc ax,bh
 adc ax,ch
 ret 
 sums endp

此代码出错; “操作类型不匹配”

4 个答案:

答案 0 :(得分:3)

不确定。只需将8位值加载到寄存器中,然后对其进行符号扩展或零扩展。然后添加。

答案 1 :(得分:1)

当然。

mov ax,33h
mov cx,1133h
add ax,cx

答案 2 :(得分:1)

这是一个黑暗的镜头,如果我错了,请纠正我(NASM - AT& T语法)

 .section .text

 .globl _start
_start:
 movl $0, %eax
 mov $0x280, %ax
 movl $0, %ebx
 movl $0, %ecx
 mov $0x30, %bh
 mov $0x20, %ch
 add %bx, %ax
 add %cx, %ax

 movl %eax, %ebx    # store the result in %ebx
 movl $1, %eax      # syscall for exit()
 int $0x80

如果您使用的是Linux,请在控制台上运行此应用程序后执行:

echo $?

打印应用程序的返回代码,这实际上是我们之前所做的总和(并存储在%ebx中)。

答案 3 :(得分:0)

更改

mov bh,30h
mov ch,20h
adc ax,bh
adc ax,ch

mov bx,30h
mov cx,20h
adc ax,bx
adc ax,cx