本文分为3个模块。
示例---该指令的示例
解释---为指令不好理解的地方
练习---为了更熟悉该指令
1.1 有符号除法指令及取余example:
在c语言里要完成 8 / 2的汇编指令如下:
在c语言里要完成 8 % 2的汇编指令如下:
.section .text
.global _start
_start:
movl $8, %eax #被除数是%edx:%eax 是这两个寄存器拼起来的%eax存放低位%edx存储高位
movl %eax, %edx
shrl $31, %edx #根据符号位填充%edx寄存器
movl $2, %ecx
idivl %ecx #%eax保存商 %edx保存余数
上面的也是4个字节除法及取余运算示列,跟据所使用的类型不同(c语言有同类概念)还有如下变种:
1个字节的除法及取余运算示例如下:
.section .text
.global _start
_start:
movw $8, %ax #被除数是%ax寄存器
movb $2, %cl
idivb %cl #除数可以是通用寄存器,这里的demo是%cl。%al存放商。%ah存放余数
2个字节的除法及取余运算示例如下:
.section .text
.global _start
_start:
movw $8, %ax #被除数是%dx:%ax 是这两个寄存器拼起来的%ax存放低位%dx存储高位
movw %ax, %dx
shrw $15, %dx
movw $2, %cx
idivw %cx #%ax保存商 %dx保存余数
8个字节的除法及取余运算示例如下: