2016-05-06 77 views
-1

我想弄清楚这个程序。只是想知道我是否与该计划有关。我如何纠正这个程序?任何帮助表示赞赏。谢谢。x86 Irvine32:汇编语言 - 获取最后一个数组

“写有字的阵列的汇编语言程序。该程序加载阵列的最后一个元素置于适当大小的寄存器,并打印它。(不要硬编码的最后一个元素的索引。)”

INCLUDE Irvine32.inc  
.data 
    val1 word 1,2,3,4,5,6 
    val2 = ($-val1)/2 ; This is hardcoding 
.code 
main PROC   
    mov ax, 0 
    mov ax, val1[val2] 

    Call WriteDec 
    Call DumpRegs 
exit 
main ENDP 
END main 
+0

当你说“正确的”,什么做你意思是?硬编码的评论? –

回答

0

如果您不能使用val2 = ($-val1)/2,一个选项是选择了阵列一些终止字符,例如,'$'和循环,直到它的发现:

INCLUDE Irvine32.inc  
.data 
    val1 word 1,2,3,4,5,6,'$'    ;ARRAY WITH TERMINATING CHARACTER. 
    val2 = ($-val1)/2 ; This is hardcoding 
.code 
main PROC   
    ;mov ax, 0 
    ;mov ax, val1[val2] 

    mov si, offset val1 ;SI POINTS TO VAL1. 
    mov ax, '$'   ;TERMINATING CHARACTER. 
repeat: 
    cmp [ si ], ax 
    je dollar_found  ;IF [ SI ] == '$' 
    add si, 2    ;NEXT WORD IN ARRAY. 
    jmp repeat 

dollar_found: 
    sub si, 2    ;PREVIOUS WORD. 
    mov ax, [ si ]   ;FINAL WORD! 

    Call WriteDec 
    Call DumpRegs 
exit 
main ENDP 
END main 
+1

请不要在重复问题上复制部分答案。将问题标记为重复要好得多。 (我们现在可以这样做,因为我在其他问题上提出了更大的答案)。 –

+0

@PeterCordes,理解,好友!其实,两个答案都不一样,后来我把这个贴在另一个的末尾。无论如何,OP似乎并不喜欢它。 –

+1

啊我明白了。我只看到一个关于这个问题的近距离投票。即使您已经回答,也可以投票将其作为重复项目进行投票。 –