X86 TASM位操作
我需要显示矩阵(3x3)中的所有数字,其中数字有两个前位。 我想我已经接近解决方案了,但有些地方出了问题,你能指出什么地方出了问题吗X86 TASM位操作,x86,bit-manipulation,assembly,tasm,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:
.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和位1。您在注释(3、6、7)中给出的示例可能输出3和7,因为它们设置了最低阶的两位。即:
3 = 00000011 binary
6 = 00000110 binary
7 = 00000111 binary
因此,只有3和7符合您在代码中编写的条件
您似乎将“前两位”解释为数字以任何前导零后的二进制序列“11”开头。如果这真的是您想要的解释,那么您必须使用左移位指令,直到高位设置为1,然后检查下一个最高位是否设置为1。这取决于您所说的“两个第一位设置”的含义。如果要查找两个最低阶位,您编写的代码可以正常工作。即,设置位0和位1。您在注释(3、6、7)中给出的示例可能输出3和7,因为它们设置了最低阶的两位。即:
3 = 00000011 binary
6 = 00000110 binary
7 = 00000111 binary
因此,只有3和7符合您在代码中编写的条件
您似乎将“前两位”解释为数字以任何前导零后的二进制序列“11”开头。如果这真的是您想要的解释,那么您必须使用左移位指令,直到高位设置为1,然后检查下一个最高位是否设置为1。您看到什么症状使您认为有问题?我认为前两位的确定是错误的,因为在我输入367的地方,它只给了我其中的两个,但它们都有11作为第一位。@Viktor:是的,数字3和7。最高位位于数字的最左侧!“前两位”是指两个LSB还是MSB?投票结束时“被问得太晚了15年”。你看到了什么症状让你觉得有问题?我认为前两位的确定是错误的,因为我输入3 6 7时,只给出了其中的两个,但它们都有11个作为第一位。@Viktor:是的,数字3和7。最高位位于数字的最左侧!你说的“前两位”是指两个LSB还是MSB?投票结束时说“迟到15年”。啊。。。您可以使用test bx,0x8000来测试最高位,也可以使用bt bx,11来测试高位,如果您想找到的话。但是,如果要查找位模式“^0*11”(即查找1紧跟在最高设置位之后的数字),则需要进行一些移位。在这种情况下,您可以使用位扫描反向指令bsr cl、bx,然后测试零标志,如果设置了,则跳过扫描(因为bx=0),如果设置了dec cl,则跳过扫描,如果设置了测试符号位,则跳过扫描(因为只设置了第一位)然后是bt bx,cl来测试下一位。同意。虽然bsr指令在16位代码中不可用,这是他正在编写的。从80386 CPU和更高版本,我记得也可以在16位模式下使用!啊哈…你可以用test bx,0x8000来测试最高位或bt bx,11是的,如果你是这样的话,你可以测试高位正在尝试查找。但是,如果要查找位模式“^0*11”(即查找1紧跟在最高设置位之后的数字),则需要进行一些移位。在这种情况下,您可以使用位扫描反向指令bsr cl、bx,然后测试零标志,并跳过扫描(因为bx=0)如果设置了dec cl和测试符号位,则跳过扫描(因为只设置了第一位),如果设置了bt bx和cl,则跳过扫描以测试下一位。同意。虽然bsr指令在16位代码中不可用,这是他正在编写的。从80386 CPU和更高版本,我记得在16位模式下也可用!