我撰寫了一個接收字串的程式,然后我想搜索并顯示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
uj5u.com熱心網友回復:
我要搜索并顯示字符數
如果您按字符數表示字串的長度,則不需要搜索,因為您已將輸入設計為長度始終為 11。
更有用的是計算非空白字符的數量。如果當前字符恰好是空格字符,則回圈必須不增加計數器:
mov bx, 10
search: cmp byte ptr string[bx], ' '
je skip
inc character
skip: dec bx
jns search
“文本中的字符數 (L):”
下一個代碼計算小寫“l”和大寫“L”的數量。如果它不使用不區分大小寫,您將不會獲得圖片中的3!這次回圈跳過遞增計數器是當前字符,大寫后,不是 "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
仍然顯示數值結果,這是您目前的程式沒有做到的!
請參閱此在 DOS 中顯示數字
ps搜索回圈中的問題在Jester 和 Peter Cordes 的評論中得到了充分處理。
遲到
m09 p2 m09 al <<<< This won't work! m4c
要列印AL暫存器中的數字,您不能使用用于輸出字串的m09宏。為此,
您可以使用m02宏。一旦代碼作業正常,唯一剩下的就是轉換值3,這將是在AL以字符“3”。
m09 p2
mov al, character
add al, 48
m02
m4c
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/350601.html
上一篇:如何防止重復字串?
下一篇:這個SQL子查詢如何正確矢量化?
