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

汇编字符串比较代码编译报错,求解决操作数组合无效等问题

修复汇编代码中的两个编译错误

错误1:cmp [di], [bx] 操作数组合无效

x86汇编指令集不支持直接比较两个内存地址中的值,必须先把其中一个内存值加载到寄存器,再和另一个内存值或寄存器值比较。比如可以把[di]读到al寄存器,再和[bx]比较:

mov al, [di]
cmp al, [bx]

错误2:cmp [bx], 0 未指定操作数大小

汇编器无法判断你要比较的是字节、字还是双字,由于字符串是单字节字符,需要明确指定byte:

cmp byte [bx], 0

修改后的完整代码

enter:
  pusha
  mov ah, 0x0e
  mov al, 0x0a
  int 0x10
  mov al, 0x0d
  int 0x10
  popa
  mov di, reserved_string
  mov bx, string2
  jmp loop1

loop1:
  cmp di, si
  je middle_loop1
  ; 修复第一个错误:先把内存值读到寄存器再比较
  mov al, [di]
  cmp al, [bx]
  jne go_back_loop1
  inc di
  inc bx
  jmp loop1

go_back_loop1:
  mov si, reserved_string
  jmp key_press

middle_loop1:
  mov bx, string2
  pusha
  jmp print_ping

print_ping:
  ; 修复第二个错误:指定操作数为字节
  cmp byte [bx], 0
  je go_back_print_ping
  mov ah, 0x0e
  mov al, [bx]
  int 0x10
  inc bx
  jmp print_ping

go_back_print_ping:
  popa
  jmp key_press

补充说明

  • 字符串比较逻辑里的cmp di, si是比较两个指针是否相等,请确保si确实指向reserved_string的结束位置(比如字符串末尾的0或预定长度的终止位置),避免出现越界或错误判断。
  • int 0x10的0x0e功能是Teletype输出,每次输出一个字节,和我们指定的byte操作数大小匹配,逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:12:19