You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM汇编使用or指令后预期输出Z却出现乱码问题求助

问题原因

  • 核心错误是多执行了一步无意义的add al, byte '0'操作:
    1. 执行or al, bl之后,al的值已经是0x5A,刚好对应ASCII表中的大写字母Z
    2. '0'的ASCII值是0x30,相加后al变成0x5A + 0x30 = 0x8A,超出了常规可打印ASCII字符的范围,所以输出乱码
  • 如果想要输出小写的z,不需要加'0',可以直接把bl的值设为0x60,或者在得到0x5A之后加0x20(大小写字母的ASCII差值为32,即十六进制0x20)

修正后代码示例

section .text
   global   _start

_start:
   mov   al,   1ah   ; 0001 1010
   mov   bl,   60h   ; 0110 0000

   or    al,   bl    ; 0111 1010 ==> 'z'

   mov   [result], al 

   mov   eax,  4        ; syscall (write)
   mov   ebx,  1        ; file descriptor
   mov   ecx,  result   ; message to write
   mov   edx,  1        ; message length
   int   0x80           ; call kernel

outprog:
   mov   eax,  1
   int   0x80

segment .bss
   result   resb  1

编译运行命令

和你原来的命令保持一致即可正常输出小写z:
nasm -f elf hello.asm ; ld -m elf_i386 -s -o hello hello.o; ./hello

内容的提问来源于stack exchange,提问作者foe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:09:04