我正在尝试编写代码以汇编语言读取用户输入字符串,但我不得不使用NASM。下面的代码是为MASM设计的,我想'翻译'到NASM,但我遇到'缓冲'指令的问题。为什么我不能声明缓冲区[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,"$"
答案 0 :(得分:3)
我用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指令(see this section of the manual)