首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NASM装配编程基础

NASM装配编程基础
EN

Stack Overflow用户
提问于 2018-03-29 14:59:29
回答 1查看 572关注 0票数 0

我是程序集编程的初学者,我想澄清在解释这段代码时引起的一些疑虑。

代码语言:javascript
复制
%macro print 2
    mov rax,1
    mov rdi,1
    mov rsi,%1
    mov rdx,%2
    syscall
%endmacro   
%macro exit 0
    mov rax,60
    mov rdi,0
    syscall
%endmacro
%macro accept 2
    mov rax,0
    mov rdi,0
    mov rsi,%1
    mov rdx,%2
    syscall
%endmacro
section .data

    a dw 123AH



section .bss
    b resb 2;       
    buff resb 2;

section .code
global _start
_start:
    accept b,2
    mov rsi,a           ;3
    mov rbx,[rsi]           ;6
    call hextoascii
    mov rsi,buff
    exit
hextoascii:
    mov rcx,4
    mov rsi,buff
    back:
        rol bx,4
        mov al,bl
        and al,0Fh
        cmp al,09H
        jbe add30h
        add al,7h
        add30h:
            add al,30h
        mov [rsi],al
        inc rsi         ;4
    loop back
    print buff,2            ;7


ret

我有几个问题要问:

  1. 以下两者在内存中的存储方面是否有任何区别?
  2. 如果我接受来自用户的变量,那么我必须为按下的"Enter“键保留另一个字节。是这样吗?如果是,那么将"Enter“的ascii值作为变量的最后一个字节连接起来吗?
  3. 指令: mov,a (a=1234H),rsi指向哪个内存位置a?它是存储地址4还是地址1.
  4. 如果我增加rsi,它会指向变量a的下一个数字吗?我该如何解释代码第4行中的"inc rsi“?假定rsi当前指向"a“的基地址,rsi的位置会增加多少?增量是否取决于它所指向的变量的大小?
  5. 记忆中的“礼物”是怎样的?ie-相对于其他数字而言,1是在最低地址还是在最高地址?
  6. 在说明: mov rbx,rsi多少'a‘进入rbx和什么是最大限度的'a’,rbx可以存储在其中?
  7. 在说明:打印buff,4它只打印一半的价值'a‘(12),而不是'1234’完全。我已经读过,print宏的第二个参数应该是变量的大小(这里是' buff '),但是由于buff的大小是2个字节,所以它只是打印一半而不是完全。相反,如果我替换2乘4,那么完整的'1234‘将被打印。这里的尺寸是什么意思?是因为不。字节还是其他什么的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 15:28:06

  1. 不是的。
  2. 是。
  3. x86是小字节,所以第一个字节是最不重要的字节,即34h
  4. 不,十六进制数字是4位(半字节)。您只能指向字节。inc rsi增加1,当用作地址时是1字节。
  5. 见上文第3点。
  6. 由于您正在加载到rbx,这是一个64位寄存器,这是多少您将得到。
  7. 要打印的文本的长度。代码中断是因为它将4个字节写入一个2字节的缓冲区中。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49559312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档