注册 登录
编程论坛 汇编论坛

汇编循环问题。。。。。

冲动小弟 发布于 2011-12-29 17:45, 526 次点击
我变了一个将16进制数转换为ASCII码的程序,但是再循环方面出了一点问题,不能跳出循环源程序如下:
DATA SEGMENT
 BBUF DB 86H,38H
 LENGTH1 EQU $-BBUF
 ABUF DB 4 DUP(0)
DATA ENDS
STACK1 SEGMENT PARA STACK
  DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
  ASSUME CS:CODE,DS:DATA,SS:STACK1
START:MOV AX,DATA
      MOV DS,AX
      MOV SI,0
      MOV DI,0
      MOV CX,LENGTH1
LOP:MOV AL,BBUF[SI]
    MOV BL,AL
    MOV CL,4
    SHR BL,CL
    ADD BL,30H
    MOV ABUF[DI],BL
    AND AL,0FH
    ADD AL,30H
    MOV ABUF[DI+1],AL
NEXT:INC SI
     INC DI
     INC DI
     LOOP LOP
     MOV AH,4CH
     INT 21H
 CODE ENDS
    END START
希望大家帮一下忙,先谢谢了。。。。。
1 回复
#2
zaixuexi2012-01-01 11:37
DATA SEGMENT
    BBUF DB 86H,38H    ;char bbuf[] = {0x86, 0x38};
    LENGTH1 EQU $-BBUF ;#define LENGTH1 (sizeof(bbuf));
    ABUF DB 4 DUP(0)   ;char abuf[4];
DATA ENDS
STACK1 SEGMENT PARA STACK
      DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK1
START:
    MOV AX,DATA
    MOV DS,AX
    MOV SI,0           ;short i = 0;
    MOV DI,0           ;short j = 0;
    MOV CX,LENGTH1     ;short count = LENGTH1;
LOP:
    MOV AL,BBUF[SI]    ;char ch = bbuf[i];
    MOV BL,AL
    MOV CL,4           ;LOBYTE(count) = 4;
    SHR BL,CL
    ADD BL,30H
    MOV ABUF[DI],BL    ;abuf[j] = (ch >> LOBYTE(count) + 0x30);
    AND AL,0FH         ;ch &= 0x0f
    ADD AL,30H         ;ch += 0x30;
    MOV ABUF[DI+1],AL  ;abuf[j+1] =  ch;
NEXT:
    INC SI             ;i++;
    INC DI
    INC DI             ;j += 2;
    LOOP LOP           ;while(--count);
    MOV AH,4CH
    INT 21H            ;exit(0);
CODE ENDS
    END START
现在看出问题了么?
1