我正在尝试编写一个汇编语言程序,它读取一个数字并将其与 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 进行编译。有谁知道那是什么意思?
对不起所有的基本问题。这是我第一次处理汇编语言并发现它非常困难......