将 .data 部分中定义的整数移动到寄存器

Moving integers defined in .data section to registers

我正在尝试用 16 位整数初始化内存位置并打印它。

我得到的结果是一个unsigned short的最大值。 val的大小是DW所以是16位,AX也是16位,所以没有大小冲突。

mov [val], word 122 做我想做的事,但如果在主程序中初始化是我的目标,我会使用 .bssval2.

为什么会发生这种情况,我如何实际获取存储在 val 的值?

我在DOSBox下使用nasm prog.asm -o prog.exe

section .data
    val dw 123

section .bss
    val2 resw 1

section .text
    global _start

_start:
    ; mov [val], word 122
    mov ax, word [val]
    mov cx, 0
    mov bx, 10

    loophere:
        mov dx, 0
        div bx                         

        push ax
        add dl, '0'                     

        pop ax                          
        push dx                         
        inc cx                          
        cmp ax, 0                       
        jnz loophere

    mov ah, 2    

    loophere2:
        pop dx                          
        int 21h                         
        loop loophere2



在程序开头加入org 0x100解决了偏移量不对引起的问题