这个汇编程序错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/05/17 03:45:20
DATA SEGMENT
NUM8 DB 93H
NUM16 DW 0ABCDH
ASCBUF DB 20 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE, SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV DX,0
MOV DL,NUM8 ;转换二进制数送DX
MOV CX,8 ;置位数8
LEA DI,ASCBUF ;字符串首址→DI
CALL BTASC ;调用子程序BTASC
MOV [DI],BYTE PTR 0DH
MOV [DI+1],BYTE PTR 0AH
MOV [DI+2],BYTE PTR ‘$’
LEA DX,ASCBUF
MOV AH,9
INT 21H
MOV DX,NUM16
MOV CX,16 ;置位数16
LEA DI,ASCBUF
CALL BTASC
MOV [DL],BYTE PTR 0DH
MOV [DL+1],BYTE PTR 0AH
MOV [DL+2],BYTE PTR ‘$’ ; 显示转换后的字符串
LEA DX, ASCBUF
MOV AH,9
INT 21H
BTASC PROC
PUSH AX ;保存AX
MOV AL,0
CMP CX,8 ;比较8位数
JNE L1 ;直接转换16位数
MOV DH,DL ;8位数转换送DH
L1: ROL DX,,1 ;DX最高位移入CF
RCL AL,1 ;CF移入AL最低位
ADD AL,30H
MOV [DI],AL
INC DI
LOOP L1
POP AX
RET

你的程序中的那些标点(逗号,引号,分号等等)都写成汉字标点了,应该是英文半角标点。还有两处错误,我在程序中标出来了。

正确的程序如下:
DATA SEGMENT
NUM8 DB 93H
NUM16 DW 0ABCDH
ASCBUF DB 20 DUP(0)
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE ;这里ss去掉了,不定义堆栈段也可以。但是你有对应关系,而又没定义stack,错误
START: MOV AX,DATA
MOV DS,AX

MOV DX,0
MOV DL,NUM8
MOV CX,8
LEA DI,ASCBUF
CALL BTASC

MOV [DI],BYTE PTR 0DH
MOV [DI+1],BYTE PTR 0AH
MOV [DI+2],BYTE PTR '$'
LEA DX,ASCBUF
MOV AH,9
INT 21H

MOV DX,NUM16
MOV CX,16
LEA DI,ASCBUF
CALL BTASC

MOV [DI],BYTE PTR 0DH
MOV [DI+1],BYTE PTR 0AH
MOV [DI+2],BYTE PTR '$&#