2013-03-13 80 views
2

我想写一个代码来读取汇编语言的用户输入字符串,但我不得不使用NASM。下面的代码是为MASM设计的,我想'翻译'到NASM,但是我遇到了'缓冲区'指令的问题。为什么我不能声明缓冲区[bx + 2]?什么是正确的'翻译'?NASM等效MASM代码

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

'缓冲液[BX + 2]'将'[缓冲液+ BX + 2]'在NASM – Brendan 2013-03-13 04:16:10

+0

我mov [buffer + bx + 2],'$'有问题,但我通过添加mov al,'$'然后mov [buffer + bx + 2],al解决。首先,我清除了斧头。谢谢! – 2013-03-13 04:32:53

回答

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不available--查找TIMES指令(see this section of the manual
+0

谢谢你,该程序的作品! – 2013-03-13 04:31:29