数値を読み取って 5 と比較するアセンブリ言語プログラムを作成しようとしています。数値が 5 未満の場合、プログラムは正常に終了するはずです。何をしても、正常に終了しないようです。常にエラーラベルにジャンプします。
私のコード:
bits 16
org 0x100 ;start at offset 100
jmp main
buffer: db 4 ; define 4 bytes
db 0 ; actual number of characters entered
msg: db "Enter a number between 0 and 5 ", 0ah, 0dh, '$' ; define bytes for message
ermsg: db "The number must be between 0 and 5", 0ah, 0dh, '$';error message if number is too large
main:
dsp_msg: mov ah, 09 ; screen display
mov dx, msg ; mov starting address of msg into dx
int 21h ; display message
in_buff: resb 20 ; reserve 20 bytes
mov ah, 0ah ; service read character
mov dx, buffer ;move address of parameter block to dx
int 21h ;bios system call
sub dx, 30h
chk_num:
cmp dx, '5' ;compare entered nnumber to 5
jge err ;if entered value is greater or equal to 5 jump to err
jb fin ;if entered number is below 5 jump to fin
err: mov ah, 09 ;
mov dx, ermsg ;move ermsg to dx
int 21h ;display error message
jmp in_buff
fin: int 20h
私が間違っていることはありますか?
"アップデート:
01 関数を使用するようにコードを変更しました
が、「操作サイズが指定されていません」というエラー メッセージが表示され続けます。
私の新しいコード:
bits 16
org 0x100 ;start at offset 100
jmp main
buffer: db 4 ; define 4 bytes
db 0 ; actual number of characters entered
msg: db "0 から 5 までの数字を入力してください", 0ah, 0dh, '$' ; メッセージのバイトを定義する
ermsg: db "The number must be between 0 and 5", 0ah, 0dh, '$';error message if number is too large
main:
dsp_msg: mov ah, 09 ; screen display
mov dx, msg ; mov starting address of msg into dx
int 21h ; display message
in_buff: resb 20 ; reserve 20 bytes
mov ah, 01 ; service read character
mov dx, buffer;move address of parameter block to dx
int 21h ;dos system call
chk_num:
cmp [dx], 5 ;compare entered nnumber to 5
jge err ;if entered value is greater or equal to 5 jump to err
jb fin ;if entered number is below 5 jump to fin
err: mov ah, 09 ;
mov dx, ermsg ;move ermsg to dx
int 21h ;display error message
jmp in_buff
fin: int 20h
コンパイルにはnasmを使用しています。誰かがそれが何を意味するか知っていますか?
基本的な質問ばかりで申し訳ありません。アセンブリ言語を扱うのはこれが初めてで、非常に難しいと感じています...