Re: [問題] 條件迴圈指令的疑問
修改一下你的code 因為裡面有很多無意義的code
1. 若你data是定義SWORD 請cmp時也用SWORD
但因為你data根本沒負號 甚至數值沒超過byte
建議寫BYTE就好 可以省code
2. 虛指令最好加.
3. 當你要寫code時 若你邏輯沒很強時 建議先畫流程圖
.data
array WORD 0,0,1,0,10,30,0,4
str1 BYTE "Nonzero data not found!",0Dh,0Ah,0
str2 BYTE "Nonzero data found!",0Dh,0Ah,0
.code
main PROC
mov bl, 0
mov esi, OFFSET array
mov ecx, LENGTHOF array
sub esi, TYPE array
L1:
add esi, TYPE array
cmp WORD PTR [esi], 0
loopz L1
mov edx, OFFSET str2
mov bl, 1
jz write_str1
mov edx, OFFSET str1
mov bl, 0
write_str1:
call WriteString
test bl, 1
jne finish
mov ax, WORD PTR [esi]
call xxx (xxx副程式 將Hex轉成ASCII, 並列印出數字)
finish:
.exit
main ENDP
END main
※ 引述《jimmy5566 (56好棒)》之銘言:
: .data
: array SWORD 0,0,1,0,10,30,0,4
: sentinel SWORD 0h
: str1 BYTE"Nonzero data not found!",0Dh,0Ah,0
: str2 BYTE"Nonzero data found!",0Dh,0Ah,0
: .code
: main PROC
: mov esi,OFFSET array
: mov ecx,LENGTHOF array
: L1:
: cmp WORD PTR [esi],0
: pushfd
: add esi,TYPE array
: popfd
: loopz L1
: jz quit
: sub esi,TYPE array
: quit:
: cmp WORD PTR[esi],0h
: jz L2
: mov edx,OFFSET str2
: jmp L3
: L2:
: mov edx,OFFSET str1
: L3:
: call WriteString
: exit
: main ENDP
: END main
: 以上的執行結果會出現Nonzero data found!
: 如果希望能顯示出陣列"第一個不為0的整數是1"
: 那要在這段程式中加上什麼程式碼呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.79.49
推
05/10 18:03, , 1F
05/10 18:03, 1F
→
05/10 21:10, , 2F
05/10 21:10, 2F
→
05/10 21:23, , 3F
05/10 21:23, 3F
→
05/10 22:06, , 4F
05/10 22:06, 4F
※ 編輯: eentut 來自: 122.116.106.31 (05/10 23:13)
→
05/10 23:27, , 5F
05/10 23:27, 5F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章