我最近开始学习NASM,我坐在 Arch x86_64 下,NASM 版本 2.15.04。我最近发现了以下代码:
section .text
global _start
_start:
mov al,'3'
sub al, '0'
mov bl, '4'
sub bl, '0'
mul bl
add al, '0'
mov [res], al
mov ecx,msg
mov edx, len
mov ebx,1
mov eax,4
int 0x80
mov ecx,res
mov edx, 1
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
section .data
msg db "The result is:", 0xA,0xD
len equ $- msg
segment .bss
res resb 2
所以,如果你乘以使得输出数字小于 10(十进制),那么一切正常,如果数字更大,那么结果就是胡说八道。(在这个版本中 3*4 = 4f)
在 al 中相乘后,数字在小数点后两位以内。为了显示它们,您需要将 ax 除以 10 (
div bl)。在这种情况下,al 将有一个商,而 ah 将有一个余数。如果 al 为零,则输出 ah
输出人
输出啊