0

最初の 2 ビットが設定されている行列 (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
4

1 に答える 1

3

「最初の 2 つのビット セット」の意味によって異なります。最下位 2 ビットを探している場合、作成したコードは正常に機能します。つまり、ビット 0 とビット 1 がセットされます。コメント (3, 6, 7) で示した例では、最下位の 2 ビットが設定されているため、おそらく 3 と 7 が出力されます。あれは:

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

したがって、コードに記述した条件を満たすのは 3 と 7 だけです。

「最初の2ビット」を解釈して、数値が先行ゼロの後のバイナリシーケンス「11」で始まることを意味しているようです。それが本当にあなたが望む解釈である場合は、上位ビットが1に設定されるまで左シフト命令を使用し、次に上位ビットが1に設定されているかどうかを確認する必要があります.

于 2010-12-06T22:16:53.153 に答える