Re: [問題] 條件迴圈指令的疑問

看板ASM (組合語言)作者時間15年前 (2010/05/10 14:50), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串2/2 (看更多)
修改一下你的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
請問一下,call xxx xxx副程式要打什麼?
05/10 18:03, 1F

05/10 21:10, , 2F
xxx副程式 將Hex轉成ASCII, 並列印出數字...= =
05/10 21:10, 2F

05/10 21:23, , 3F
抱歉 我不太懂這意思...
05/10 21:23, 3F

05/10 22:06, , 4F
寫一個副程式叫做xxx 它的作用是將Hex轉成ASCII並印出
05/10 22:06, 4F
※ 編輯: eentut 來自: 122.116.106.31 (05/10 23:13)

05/10 23:27, , 5F
感謝
05/10 23:27, 5F
文章代碼(AID): #1Bvwop0n (ASM)
討論串 (同標題文章)
文章代碼(AID): #1Bvwop0n (ASM)