将 .data 部分中定义的整数移动到寄存器
Moving integers defined in .data section to registers
我正在尝试用 16 位整数初始化内存位置并打印它。
我得到的结果是一个unsigned short的最大值。 val的大小是DW
所以是16位,AX
也是16位,所以没有大小冲突。
mov [val], word 122
做我想做的事,但如果在主程序中初始化是我的目标,我会使用 .bss
和 val2.
为什么会发生这种情况,我如何实际获取存储在 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
解决了偏移量不对引起的问题
我正在尝试用 16 位整数初始化内存位置并打印它。
我得到的结果是一个unsigned short的最大值。 val的大小是DW
所以是16位,AX
也是16位,所以没有大小冲突。
mov [val], word 122
做我想做的事,但如果在主程序中初始化是我的目标,我会使用 .bss
和 val2.
为什么会发生这种情况,我如何实际获取存储在 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
解决了偏移量不对引起的问题