2013-03-13 82 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