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 に答える