0
DOSアセンブリでユーザー入力を取得しようとしていますが、DSとDXを設定する方法を頭に入れていないようです正しい場所への書き込みを中断します。私のメインファイルのコードは次のとおりです。DSを設定し、DOSでAH = 0Ahを使用する
BITS 16
org 0x100
Start:
; SNIP
mov dx, Name
call GetString
; SNIP
Exit:
mov ax, 0x4c00
int 0x21
Name:
db 33
db 0
times 255 db 0
そして、ここに別のファイルからの私のGetStringプロシージャがあります。私はそれが動作しない理由を得るように見えることはありません
GetString:
push ax
push bx
; syscall
mov ax, 0x0a
int 0x21
mov bx, dx ; move buffer to adressing register
inc bx ; get number of chars read
movzx si, [bx] ; put bx's value (numbers of chars read) into si
inc bx ; get actual string buffer
add si, bx ; number of chars read + buffer = last byte
mov byte [si], '$' ; $ terminate
mov dx, bx
pop bx
pop ax
ret
:私はそれは関数が呼び出される前に、DXが設定されることを期待して、実際の文字列の先頭を指してDXを残すようにすることを意図しました。私は何かにDSを設定すると思いますか? GetString
で
「機能しません」というのは良い問題の説明ではありません。何が起こり、どうやって間違っているのか分かりますか? – Jester
".com"実行可能ファイルのように見えます。ここでは、すべてのデータとコードとスタックは単一セグメントにあり、コードは '0x0100'から始まります。だから、コードの始めに、 'cs'を' ds'にコピーする 'push cs'' pop ds'を実行することができます。これは" .com "(" .exe "ではなく)で使えるはずです。 – Ped7g
一部のアセンブラでは、 'MOV AX、@ DATA; MOV DS、AX' .exeファイルをアセンブルします。 –