在屏幕上显示数字
在屏幕上显示数字
div除法指令
无符号除法指令,div
指令:div 除数所在的寄存器或者内存地址
如果在指令中指定的是8位寄存器或者8位操作数的内存地址,意味着被除数在寄存器AX中
相除后,商在寄存器AL里,余数在寄存器AH里
如果指令中指定的是16位寄存器或者16位操作数的内存地址,则意味着被除数是32位的,低16位在寄存器AX里,高16位在寄存器DX里
相除后,商在寄存器AX里,余数在寄存器DX里
如果指令中指定的是32位寄存器或者32位操作数的内存地址,则意味着被除数是64位的,低32位在寄存器EAX里,高32位在寄存器EDX里(80806不支持)
相除后,商在寄存器EAX里,余数在寄存器EDX里
如歌指令着指定的是64位寄存器或者64位操作数的内存地址,则意味着被除数是128位的,低64位在寄存器RAX中共,高64位在寄存器EDX里
相除后,商在寄存器RAX里,余数在寄存器RDX里
1 | ;计算378除37结果 |
xor指令
xor = exclusive or 异或
1 | xor 寄存器/内存 , 寄存器/内存/立即数 |
计算结果保存在左操作数中,两操作数指定的数据长度必须相同
add指令
1 | add 寄存器/内存地址 , 寄存器/捏成/立即数 |
两个操作数的长度必须相同,而且两个操作数不可以同时为内存地址
在屏幕上显示数字65535
1 | start: |
在NASM汇编中,标号可以由 字母 数字 _ $ # @ . ? 组成
其中可以打头的字符是 字母 . _ ?
冒号后面可以放一个冒号,但它不是标号的一部分
在需要两个操作数的指令中,如果至少有一个是寄存器。则不需要长度修饰符
1
2
3mov ah , bl
mov [buffer] , ax
xor byte [buffer] , 0x55如果只有一个操作数且不是寄存器,必须使用长度修饰符
1
div word [divisor]
伪指令 db dw dd dq 分别用于定义 8 16 32 64 位的数据
1
2
3
4db 0x55
dw 0x55aa
dd 0xabcd1234
dq 0x12345678aabbccdd伪指令times用来重复后面的指令若干次
1
2
3
4times 2 mov ax , bx
等价于
mov ax , bx
mov ax, bx