2010-12-06 3 views
0

Мне нужно показать все числа из матрицы (3x3), где число имеет два первых бита. Я думаю, что я где-то рядом с решением, но что-то не так, можете ли вы указать, что не так?Операции бит TASM

.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 
+0

Какой симптом вы видите, что заставляет вас думать, что есть проблема? – 2010-12-06 20:49:59

+0

Я думаю, что определение первых двух битов неверно, потому что, когда я вхожу в 3 6 7, он дает мне только два из них, но оба они имеют 11 в качестве первых бит. – Viktor 2010-12-06 20:53:51

ответ

3

Это зависит от того, что вы подразумеваете под «двумя наборами первых бит». Код, который вы написали, отлично работает, если вы ищете два младших бита. То есть устанавливаются бит 0 и бит 1. Пример, который вы даете в комментариях (3, 6, 7), вероятно, выводит 3 и 7, потому что у них установлены два бита младшего разряда. То есть:

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

Таким образом, только 3 и 7 соответствуют условиям, которые вы указали в своем коде.

Вы, кажется, интерпретируете «два первых бита», чтобы означать, что число начинается с двоичной последовательности «11» после любых начальных нулей. Если это действительно то, что вам нужно, тогда вам придется использовать инструкцию сдвига слева до тех пор, пока высокий бит не будет установлен в 1, а затем проверьте, установлен ли бит следующего из самого высокого значения 1.

 Смежные вопросы

  • Нет связанных вопросов^_^