我迷失在集会神奇的世界里。如果键入的符号是数字还是其他符号,是否有可能检入汇编(我正在使用TASM)?示例:我输入'A'并且程序打印出来它不是数字并结束程序。如果我输入数字,它将继续该程序。
同一页面上的另一个问题(不创建新帖子):如何比较编写的字符串是程序所期望的?例如,如果您输入'/?'程序打印出某些消息?
任何答案都非常感谢。
这是我的书面程序,我需要实现这些功能:
.model small
.stack 100h
.data
abc db 10
eilmax db 10, ?, 10 dup(0)
.code
start:
mov ax, @data
mov ds, ax
mov ah, 0Ah
mov dx, offset eilmax
int 21h
mov ax, 0
mov bx, offset eilmax[2]
jmp change
change: ;written number converts from ascii to dec
mov ch, 0
mov cl, byte ptr [bx]
cmp cl, 13
je fibo
sub cl, 48
mul abc
add ax, cx
inc bx
jmp change
fibo:
mov bx, 0
mov cx, 1
findfibo: ;finds n-th number of fibonacci sequence
add bx, cx
mov dx, bx
mov bx, cx
mov cx, dx
sub ax, 1
cmp ax, 1
je find
jmp findfibo
find: ;finds if number is less or greater than 10
cmp bx, 10
jge convert
jmp writesmall
convert: ;if number is > 10, program devides number to two numbers
mov dx, 0
mov ax, 0
mov ax, bx
mov bx, 10
div bx
jmp writebig
writebig: ;prints out greater than 10 found number
mov bx, 0
mov bx, dx
mov dx, 0
add ax, 48
mov dx, ax
mov ah, 02h
int 21h
add bx, 48
mov dx, bx
mov ah, 02h
int 21h
jmp chg
writesmall: ;print out less than 10 found number
add bx, 48
mov dx, bx
mov ah, 02h
int 21h
jmp chg
chg: ;end program
mov ax, 4C00h
int 21h
end start
答案 0 :(得分:0)
ASCII数字将在范围内(0x30; 0x30 +9)// 48十进制(第一个问题)
可能有用的中断:
INT 16h / AH = 00h
- 从键盘获取击键(无回声)。
AL = ASCII字符。
INT 16h / AH = 01h
- 检查键盘缓冲区中的击键。
AL = ASCII字符。
字符串指令集(第二个问题):
CMPSB
- 比较字节:ES:来自DS的[DI]:[SI]。
LODSB
- DS的加载字节:[SI]到AL。更新SI。
MOVSB
- DS的字节:[SI]到ES:[DI]。更新SI和DI。
SCASB
- 来自AL
的比较字节:ES:[DI]
。
STOSB
- 将AL
中的字节存储到ES:[DI]
中。更新DI.
REP
- 重复函数cx次
有关示例和文档,请参阅: emu8086 documentation