如何设置进位标志添加两个数字(32 位)
How can I set the carryflag adding two numbers (32bit)
我用read_int得到了两个数,加了两个数。
最后我检查了 EFLAGS (dump_regs)。
所以,为了设置进位标志,我尝试了“4,294,967,295 + 1”
但是,没有设置进位标志。('CF' 没有在屏幕上显示)
如果我想设置进位标志,我需要什么数字?
call read_int
mov ebx, eax
call read_int
mov ecx, eax
mov edx, ebx ; add the two numbers, edx = ebx - ecx
add edx, ecx
mov eax, edx
call print_int
call print_nl
dump_regs 1
然后我输入了 4294967295 和 1
如果您运行以下代码,您可以确信设置了进位标志:
call read_int ;Input say 150
mov ebx, eax
call read_int ;Input say 180
add al, bl ;This produces a carry because 150+180=330 DOESN'T FIT the 8-bit register AL
setc al ;AL becomes 1
movzx eax, al ;EAX becomes 1
call print_int ;Show it
验证不产生进位的数字:
call read_int ;Input say 80
mov ebx, eax
call read_int ;Input say 125
add al, bl ;This produces NO carry because 80+125=205 DOES FIT the 8-bit register AL
setc al ;AL becomes 0
movzx eax, al ;EAX becomes 0
call print_int ;Show it
我用read_int得到了两个数,加了两个数。 最后我检查了 EFLAGS (dump_regs)。
所以,为了设置进位标志,我尝试了“4,294,967,295 + 1” 但是,没有设置进位标志。('CF' 没有在屏幕上显示)
如果我想设置进位标志,我需要什么数字?
call read_int
mov ebx, eax
call read_int
mov ecx, eax
mov edx, ebx ; add the two numbers, edx = ebx - ecx
add edx, ecx
mov eax, edx
call print_int
call print_nl
dump_regs 1
然后我输入了 4294967295 和 1
如果您运行以下代码,您可以确信设置了进位标志:
call read_int ;Input say 150
mov ebx, eax
call read_int ;Input say 180
add al, bl ;This produces a carry because 150+180=330 DOESN'T FIT the 8-bit register AL
setc al ;AL becomes 1
movzx eax, al ;EAX becomes 1
call print_int ;Show it
验证不产生进位的数字:
call read_int ;Input say 80
mov ebx, eax
call read_int ;Input say 125
add al, bl ;This produces NO carry because 80+125=205 DOES FIT the 8-bit register AL
setc al ;AL becomes 0
movzx eax, al ;EAX becomes 0
call print_int ;Show it