64位汇编下指令的一些说明 mov movsxd add sub inc dec 指针

; 64位汇编下指令的一些说明
mov rax, 0ABCDEF0AFFFFFFFFh
mov rax, 0FFFFFFFFh ; rax = 00000000ffffffffh
MOV RAX, 06666h ; 16-63清位
mov rax, 055h ; 8-63清位

.data
myDword dword 800000000h
.code
mov rax, 0ffffffffffffffffh
mov eax, myDword ; rax = 0000000080000000h

.data
myByte byte 55h
myWord word 6666h
.code
mov ax, myWord ; 16-63不受影响
mov al, myByte  ; 8-63不受影响

mov ebx, 0ffffffffh
movsxd rax, ebx ; rax = ffffffffffffffffh

.data
myArray word 10, 20, 30, 40
.code
mov rsi, offset myArray ; 64位地址

加法和减法

; add, sub
mov rax, 0ffffffffh
add rax, 1 ; rax = 100000000h

mov rax, 0ffffh ; rax = 000000000000ffffh
mov bx, 1 ;
add ax, bx ; rax = 0h

mov rax, 0ffh
mov bl, 1
add al, bl

mov rax, 0
mov ebx, 1
sub eax, ebx ; rax = 00000000ffffffffh
mov rax, 0
mov bx, 1
sub ax, bx ; rax = 000000000000ffffh

; 间接寻址使用ptr
dec byte ptr [rdi]
inc word ptr [rbx]
inc qword ptr [rsi]

; 间接寻址
.data
array qword 1, 2, 3, 4
.code 
mov esi, 3
mov rax, array[esi * 8] ; rax = 4

; 指针
.data
arrayB byte 10h, 20h, 30h, 40h
ptrB qword arrayB
; ptrB qword offset arrayB
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是汇编语言,用于将一个整数除以另一个整数,并将结果输出为字符串。以下是对代码的注释: ``` DATA SEGMENT ; 定义数据段 N DW 2 ; 定义一个整数变量N,初始值为2 Y DW 15786 ; 定义一个整数变量Y,初始值为15786 STRING DB 10 DUP(?) ; 定义一个长度为10的字符串变量 DATA ENDS ; 结束数据段定义 CODE SEGMENT ; 定义代码段 ASSUME CS:CODE,DS:DATA ; 假设代码段为CS,数据段为DS START: ; 程序入口 MOV AX,DATA ; 将数据段地址存储在寄存器AX中 MOV DS,AX ; 将数据段地址复制到DS寄存器中 MOV AX,Y ; 将变量Y的值存储在寄存器AX中 MOV DX,0 ; 将寄存器DX的值清零 MOV BX,OFFSET STRING; 将字符串变量的偏移地址存储在寄存器BX中 L1: ; 循环开始 DIV N ; 将AX寄存器中的值除以N变量中的值,商存储在AL中,余数存储在AH中 ADD DL,30H ; 将余数加上30H,得到对应的ASCII码 MOV [BX],DL ; 将ASCII码存储到字符串变量的内存地址中 MOV DX,0 ; 将余数清零 INC BX ; 将字符串变量的内存地址指向下一个字符 CMP AX,0 ; 判断商是否为0 JNZ L1 ; 如果商不为0,则继续循环 MOV CX,BX ; 将字符串变量的内存地址存储在寄存器CX中 SUB CX,OFFSET STRING; 将寄存器CX中的值减去字符串变量的偏移地址,得到字符串的长度 DEC BX ; 将指针回到最后一个字符的位置 L2: ; 循环开始,用于输出字符串 MOV AH,2 ; 设置系统调用号为2,表示输出字符 MOV DL,[BX] ; 将当前指向的字符存储在寄存器DL中 INT 21H ; 调用中断21H,输出字符 DEC BX ; 将指针指向前一个字符 LOOP L2 ; 如果CX寄存器不为0,则继续循环 MOV AH,4CH ; 设置系统调用号为4CH,表示程序结束 INT 21H ; 调用中断21H,结束程序 CODE ENDS ; 结束代码段定义 END START ; 程序结束

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值