难以找到程序集中的字符数
Difficulty finding the number of characters in the assembly
我写了一个程序,接收一个字符串然后我想搜索并显示字符串中的字符数l
显示编号(如果存在); 0 如果不存在
程序的问题恰恰在search
循环中
该程序的其余部分工作正常。我接受了字符串,但无法搜索和显示结果。
我还把我想要的图像从输出中放出来
请帮忙。我很困惑
m02 macro
mov ah,02
mov dl,al
int 21h
endm
m08 macro
mov ah,08
int 21h
endm
m09 macro str1
mov ah,09
mov dx,offset str1
int 21h
endm
m4c macro
mov ah,4ch
int 21h
endm
stk segment stack 'stack'
dw 32 dup(?)
stk ends
dts segment
p1 db 10,13,'Please enter you text:',10,13,'$'
p2 db 10,13,'Number of characters (L) in the your text: $'
string db 11 dup(?),'$'
newLine db 10,13,'$'
character db 0
dts ends
cds segment
assume cs:cds,ss:stk,ds:dts
main proc far
mov ax,seg dts
mov ds,ax
mov si,offset string
m09 p1
mov cx,11
tek: m08
mov byte ptr [si],al
inc si
m02
loop tek
mov cx,11
mov bx, 10
mov al,character
search: cmp byte ptr string[bx], 'l'
je skip
inc al
skip: dec bx
jns search
m09 p2
m09 al
m4c
main endp
cds ends
end main
I want to search and display the number of characters
如果字符数是指字符串的长度,则不需要搜索,因为您已将输入设计为长度始终为 11。
更有用的可能是计算 非白人space 字符的数量。如果当前字符恰好是 space 字符 :
,则循环将不得不 不增加计数器
mov bx, 10
search: cmp byte ptr string[bx], ' '
je skip
inc character
skip: dec bx
jns search
“您的文本中的字符数 (L):”
下一段代码计算小写“l”和大写“L”的个数。如果不区分大小写,你就不会像图中那样得到3!这次循环 skips 递增计数器是当前字符,在大写之后,不是 "L".
mov bx, 10
search: mov al, string[bx]
and al, 0xDF ; For case-insensitive
cmp al, "L"
jne skip
inc character
skip: dec bx
jns search
保持显示数值结果,而您当前的程序不显示!
看到这个 Displaying numbers with DOS
ps Jester 和 Peter Cordes 在评论中充分解决了您 search 循环中的问题。
迟到
m09 p2
m09 al <<<< This won't work!
m4c
要打印 AL
寄存器中的数字,您不能使用用于输出字符串的 m09 宏。
为此,您有 m02 宏。一旦代码正常工作,剩下的唯一事情就是将 AL
中的值 3 转换为字符 "3" .
m09 p2
mov al, character
add al, 48
m02
m4c
我写了一个程序,接收一个字符串然后我想搜索并显示字符串中的字符数l
显示编号(如果存在); 0 如果不存在
程序的问题恰恰在search
循环中
该程序的其余部分工作正常。我接受了字符串,但无法搜索和显示结果。
我还把我想要的图像从输出中放出来
请帮忙。我很困惑
m02 macro
mov ah,02
mov dl,al
int 21h
endm
m08 macro
mov ah,08
int 21h
endm
m09 macro str1
mov ah,09
mov dx,offset str1
int 21h
endm
m4c macro
mov ah,4ch
int 21h
endm
stk segment stack 'stack'
dw 32 dup(?)
stk ends
dts segment
p1 db 10,13,'Please enter you text:',10,13,'$'
p2 db 10,13,'Number of characters (L) in the your text: $'
string db 11 dup(?),'$'
newLine db 10,13,'$'
character db 0
dts ends
cds segment
assume cs:cds,ss:stk,ds:dts
main proc far
mov ax,seg dts
mov ds,ax
mov si,offset string
m09 p1
mov cx,11
tek: m08
mov byte ptr [si],al
inc si
m02
loop tek
mov cx,11
mov bx, 10
mov al,character
search: cmp byte ptr string[bx], 'l'
je skip
inc al
skip: dec bx
jns search
m09 p2
m09 al
m4c
main endp
cds ends
end main
I want to search and display the number of characters
如果字符数是指字符串的长度,则不需要搜索,因为您已将输入设计为长度始终为 11。
更有用的可能是计算 非白人space 字符的数量。如果当前字符恰好是 space 字符 :
,则循环将不得不 不增加计数器 mov bx, 10
search: cmp byte ptr string[bx], ' '
je skip
inc character
skip: dec bx
jns search
“您的文本中的字符数 (L):”
下一段代码计算小写“l”和大写“L”的个数。如果不区分大小写,你就不会像图中那样得到3!这次循环 skips 递增计数器是当前字符,在大写之后,不是 "L".
mov bx, 10
search: mov al, string[bx]
and al, 0xDF ; For case-insensitive
cmp al, "L"
jne skip
inc character
skip: dec bx
jns search
保持显示数值结果,而您当前的程序不显示!
看到这个 Displaying numbers with DOS
ps Jester 和 Peter Cordes 在评论中充分解决了您 search 循环中的问题。
迟到
m09 p2 m09 al <<<< This won't work! m4c
要打印 AL
寄存器中的数字,您不能使用用于输出字符串的 m09 宏。
为此,您有 m02 宏。一旦代码正常工作,剩下的唯一事情就是将 AL
中的值 3 转换为字符 "3" .
m09 p2
mov al, character
add al, 48
m02
m4c