我需要在汇编语言中创建一个程序,可以计算一行中的字符数,并将最短的字符长度保存保存到一个变量中。但我真的不知道该怎么做,也找不到任何帮助。
我有这个,但它远不是我想要的。
cpu 8086
segment code
start mov bx,data
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,dno
radek mov ah,0x0a
mov dx,nacteno
int 21h
mov al,[nacteno+1]
cmp al,0
jne size
jz konec
size mov bl,[rslt34]
cmp al,bl
jle radek
mov [rslt34],al
jmp radek
konec hlt
segment data
nacteno db 255, ?
resb 255
rslt34 db 0
segment stack
resb 16
dno: db ?
字符串
1条答案
按热度按时间vs3odd8k1#
可以在一行中计数个字符
因为你使用的是DOS.BufferedInput function 0Ah,所以不需要太多的计数,因为你可以在结构的第二个字节中免费获得它。
也许令人惊讶的是,你的尝试相当不错。但是由于你初始化 * rslt 34 *(
rslt34 db 0
)的方式,cmp al,bl
jle radek
不会接近最短的字符串,而是接近最长的字符串。你应该把 * rslt 34 * 设置为255,然后使用下面的代码:
字符串
DOS给你的长度字节必须被当作一个unsigned数字。因此不要使用像
jle
和朋友一样的有符号条件跳转。使用像jb
(JumpIfBelow),jnb
(JumpIfNotBelow)等无符号条件跳转。型
实际上,BIOS/DOS堆栈至少应该是256字节,最好是512字节。
型
退出DOS程序的常用方法是使用以下指令:
型