2

我正在尝试编写代码来读取汇编语言中的用户输入字符串,但我被迫使用 NASM。下面的代码是为 MASM 设计的,我想“翻译”为 NASM,但我遇到了“缓冲”指令的问题。为什么我不能声明类似 buffer[bx+2] 的东西?什么是正确的“翻译”?

org 100h

mov ah, 09h                     ; print function
mov dx, offset nameprompt      
int 21h

mov ah, 0ah                     ; buffered string input
mov dx, offset buffer
int 21h

mov ah, 09h
mov dx, offset crlf
int 21h

mov dx, offset yourname
int 21h

xor bx, bx
mov bl, buffer[1]
mov buffer[bx+2], '$'
mov dx, offset buffer + 2
int 21h

mov ax, 4c00h
int 21h

buffer db 255,0,255 dup(0)
nameprompt db "Enter your name: $"
yourname db "Your name is: $"
crlf db 13,10,"$"
4

1 回答 1

4

我用 NASM 试用了这段代码。这是我发现的:

  • 消除“偏移”,例如:mov dx, offset nameprompt->mov dx, nameprompt
  • 正如布伦丹评论的那样,像buffer[bx+2]->[buffer+bx+2]
  • offset buffer + 2->buffer + 2
  • 这一行似乎无效:buffer db 255,0,255 dup(0); 根据 NASM 手册,dup 不可用 - 查找 TIMES 指令(请参阅手册的这一部分
于 2013-03-13T04:20:22.347 回答