TASM位操作

时间:2010-12-06 20:24:52

标签: x86 bit-manipulation assembly tasm

我需要显示矩阵(3x3)中的所有数字,其中数字设置了两个第一位。 我认为我离解决方案很近,但是出了点问题,你能指出什么是错的吗?

.model small
.stack 100h
.data
n equ 3
a dw n*n dup(?)


.code
 extrn write:near 
 extrn read:near

begin:
    mov ax,@data
    mov ds,ax
        mov cx,n*n 
    mov si,0   
m1: 
    call read
    mov a[si],ax  
    add si,2
    loop m1             

    mov si,0        
    mov cx,n*n
m2: 
    mov bx, a[si]
    test bx,1
    jz net
    test bx,2
    jz net
    mov ax,a[si]
    call write
net:
    add si,2
    loop m2

    mov ah,4ch
    int 21h
end begin

1 个答案:

答案 0 :(得分:3)

这取决于“两个第一位设置”的含义。如果您正在寻找两个最低位,那么您编写的代码就可以正常工作。也就是说,设置位0和位1。您在注释(3,6,7)中给出的示例可能输出3和7,因为它们设置了最低位的两位。那就是:

3 = 00000011 binary
6 = 00000110 binary
7 = 00000111 binary

因此,只有3和7符合您在代码中编写的条件。

您似乎正在解释“两个第一位”,表示该数字以任何前导零后的二进制序列“11”开头。如果那真的是你想要的解释,那么你必须使用左移位指令,直到高位设置为1,然后检查下一个最高位是否设置为1.