【问题标题】:increasing count in an array in Assembly 8086在大会 8086 中增加数组中的计数
【发布时间】:2013-05-15 18:13:56
【问题描述】:
freq dw 512 dup(0)
lea si, freq

;Now if I move a char 'a' into al and then do:

mov [si], al  

这会将字母“a”放在数组的第一个位置吗? 我试图让与'a'对应的ASCII数字增加1,所以在数组freq +1的第97行。如何更改我的代码来执行此操作?

*基本上我试图使用一个数组来存储我在浏览文件时遇到的所有字符的频率计数

【问题讨论】:

    标签: arrays assembly count x86-16 counting


    【解决方案1】:

    这会将字母“a”放在数组的第一个位置吗?

    是的(实际上在第一个元素的低字节,因为freq 是一个单词数组)。

    我试图让与“a”对应的 ASCII 数字增加 1,因此在数组 freq +1 的第 97 行。

    mov bx,'a'*2
    inc word ptr [bx+si]
    

    或者如果你有al中的角色:

    xor bh,bh   ; clear bh
    mov bl,al
    add bx,bx   ; scale index by 2
    inc word ptr [bx+si]
    

    如果允许 80386 指令,您可以将 xor bh,bhmov bl,al 替换为 movzx bx,al

    【讨论】:

    • 好的,我明白你的回答,对于我的问题,我直接提供了字母“a”,但是如果我要实现一个循环,将下一个字符放在寄存器 al 中,则此代码将不适用.我想做=> mov bx,(al中char的ASCII码)* 2。还有为什么是*2?这不会对数组中的第 194 个位置而不是第 97 个位置 +1 吗?
    • 您已将 freq 声明为单词数组 (dw)。所以每个元素是 2 个字节,因此索引必须按 2 缩放。如果字符在 al 中,请参阅我的更新答案以了解如何执行此操作。
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2018-04-24
    • 2015-09-25
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多