修改一下你的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
1F:推 jimmy5566:请问一下,call xxx xxx副程式要打什麽? 05/10 18:03
2F:→ eentut:xxx副程式 将Hex转成ASCII, 并列印出数字...= = 05/10 21:10
3F:→ jimmy5566:抱歉 我不太懂这意思... 05/10 21:23
4F:→ eentut:写一个副程式叫做xxx 它的作用是将Hex转成ASCII并印出 05/10 22:06
※ 编辑: eentut 来自: 122.116.106.31 (05/10 23:13)
5F:→ jimmy5566:感谢 05/10 23:27