【发布时间】:2021-04-02 06:34:40
【问题描述】:
我试图创建一个简单的汇编程序来打印二进制代码为 rax 的 ascii 字符。我有以下代码:
section .data
res db '', 0
global _start
_start:
mov rbx, 1000001
mov [res], rbx
mov rax, 1
mov rdi, 1
mov rsi, res
mov rdx, 1
syscall
mov rax, 60
xor rdi, rdi
syscall
当我执行时,它输出'A',这是正确的,因为 1000001 是 ascii A 的二进制代码,但是如果我执行这个:
section .data
res db '', 0
global _start
_start:
mov rbx, 1000010
mov [res], rbx
mov rax, 1
mov rdi, 1
mov rsi, res
mov rdx, 1
syscall
mov rax, 60
xor rdi, rdi
syscall
它输出'J',但根据我使用的表格1000010应该输出'B'。这对我来说更奇怪的是,如果我使用十进制而不是二进制,我会得到正确的输出。我在做什么啊?
【问题讨论】:
-
几乎是重复的:How to represent hex value such as FFFFFFBB in x86 assembly programming? 包括
mov ax,1100_1000b和其他 NASM 允许二进制(base-2)数字常量的语法。当然,如果你想要的话,你应该只是mov ebx, 'B'。
标签: assembly binary ascii nasm