思路:
主要是通过SHR指令对AX寄存器进行移位,有个容易出错的地方就是,当移位数超过1时,不能直接用指令SHR,而应该先将移位数存入CL,再使用指令SHR AH,CL。举个例子:
SHR AX,1 ;是可以的 SHR AX,4 ;会报错MOV CL,4 ;这样不会报错 SHR AX,CL
代码如下:
DATA SEGMENTAX_VAL DW 1001100000010000B
DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMOV AX,AX_VAL ;AX 1001 1000 0001 0000START:MOV BX,AX ;BX 1001 1000 0001 0000MOV DX,AX ;DX 1001 1000 0001 0000MOV CL,4 ;CL 0000 0100SHR AH,CL ;AH 0000 1001MOV AL,AH ;AL 0000 1001MOV BL,BH ;BL 1001 1000AND BL,0FH ;BL 0000 1000MOV DH,DL ;DH 0001 0000SHR DH,CL ;DH 0000 0001MOV CL,DH ;CL 0000 0001AND DL,0FH ;DL 0000 0000MOV AH,4CH ;调用4CH号功能返回DOS操作系统INT 21H ;终止当前程序的运行,并返回DOS系统
CODE ENDSEND START
将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这4组数作为数当中的低4位分别放在AL,BL,CL,DL中。_将ax寄存器中的16位数分成4组-CSDN博客
其实最好将AL,BL,CL,DL寄存器的值打印出来。后面再改吧......................................................