NASM相当于MASM代码

时间:2013-03-13 02:44:02

标签: assembly nasm masm

我正在尝试编写代码以汇编语言读取用户输入字符串,但我不得不使用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,"$"

1 个答案:

答案 0 :(得分:3)

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

  • 消除“偏移”,例如:mov dx, offset nameprompt - > mov dx, nameprompt
  • 正如Brendan评论的那样,像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