用XLAT换码完成作业,急用

来源:百度知道 编辑:UC知道 时间:2024/05/16 23:33:48
怎么用xlat换码完成检测8位2进制中1的个数
我有一个想法,想分别比较ax中(AL和AH)和数据段的数据,比如al中1100和数据段中1100相等,然后xlat换码后就是2,然后同理比较ah,最后把ah和al中的加起来,就是整个的1的位数,由于我是刚开始学,老是不能通过,我编的如下,请问这个怎么修改才可以,最好给完整的程序 ,如过给新的也可以
DSEG
XB DB 00001101
SJ1 db 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111
SJ2 db 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
COU1 db ?
DSEG end
CSEG
assume:cs:CSEG,ds:DSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV AX,XB
MOV CS,16H
MOV DX,OFFSET SJ1
MOV SI,OFFSET SJ2
NEXT: cmp AL,dx
JE NETX1
INC DX
LOOP NEXT
NEXT1: CMP AH,DX
JE MEXT3
INC DX
LOOP

NEXT2: MOV AL,[SI]
XLAT SJ1
MOV BL,AL
MOV CX,16H
LOOP NEXT1
NEXT3:MOV AL,[SI]
XLAT SJ1
ADD AL,BL
MOV DL,AL
MOV AH,02H
INT 21H
CSEG END
END START
其实就是用XLAT功能检测8位二进制中1的个数

DSEG segment
XB DB 00001101b
SJ2 db 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
COU1 db 0
DSEG ends
CSEG segment
assume cs:CSEG,ds:DSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV al,XB
mov ah,al
and al,0fh
MOV bx,OFFSET SJ2
xlat
add cou1,al
mov al,ah
mov cl,4
shr al,cl
xlat
add cou1,al
add cou1,30h
mov dl,cou1
MOV AH,02H
INT 21H
mov ah,1
int 21h
mov ah,4ch
int 21h
CSEG ENDs
END START

进来看了看.但还是没有看懂.! 百度去收一下相关的教程网吧!

你的问题在于 那些常数的写法,

二进制需要在数值后面加上字母B,如下:

DSEG SEGMENT
XB DB 00001101B
SJ1 db 0000B,0001B,0010B,0011B,0100B,0101B,0110B,0111B,1000B,1001B,1010B,1011B,1100B,1101B,1110B,1111B
SJ2 db 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
COU1 db ?
DSEG end
如果还有问题,请提