![]() |
#2
炎黄宇宙2012-11-15 14:27
|

DATAS SEGMENT
SHU DB -122,23,54,68,78,98;此处输入数据段代码
N EQU $-SHU
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?)
TOP LABEL WORD;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
XIANSHI PROC
CMP BL,9
JBE XIAO
ADD BL,7
XIAO:
ADD BL,30H;一定注意是30H
MOV DL,BL;显示出BL中的字符
MOV AH,2
INT 21H
RET
XIANSHI ENDP;子程序结束
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码
LEA DI,SHU
MOV CX,N
REPET:
PUSH CX
MOV AL,[DI]
PUSH AX;先把AX暂存一下,下面INT 21会破坏
AND AL,AL
JNS ZHENG
MOV DL,'-';负数,先把符号显示出来
MOV AH,02H
INT 21H
POP AX
NEG AL
ZHENG:
CMP AL,99
JBE LIANG
CBW;三位数,先把百位显示出来,假设128
MOV BH,100
DIV BH;百位是商1
MOV BL,AL;商放入BL
PUSH AX;暂存余数
CALL XIANSHI
POP AX;余数出来
MOV AL,AH;AH保存是余数28
CBW
MOV BH,10
DIV BH
MOV BL,AL;商是2十位
PUSH AX
CALL XIANSHI
POP AX
MOV BL,AH;余数8是个位
CALL XIANSHI
MOV DL,','
MOV AH,2
INT 21H;显示","
JMP XIA
LIANG:;两位数
CBW
MOV BL,10
DIV BL
MOV BL,AL;商——十位
MOV CL,AH;余数——个位
CALL XIANSHI;显示十位
MOV BL,CL
CALL XIANSHI;显示个位
;到此一个数显示完毕
MOV DL,','
MOV AH,2
INT 21H;显示","
XIA:
INC DI
POP CX
LOOP REPET; 去掉这一句就一切正常?请问怎么回事
MOV AH,4CH
INT 21H
CODES ENDS
END START
我想要把定义的数字都显示出来,但是在循环处有问题,请高手帮忙看看,多谢!SHU DB -122,23,54,68,78,98;此处输入数据段代码
N EQU $-SHU
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?)
TOP LABEL WORD;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
XIANSHI PROC
CMP BL,9
JBE XIAO
ADD BL,7
XIAO:
ADD BL,30H;一定注意是30H
MOV DL,BL;显示出BL中的字符
MOV AH,2
INT 21H
RET
XIANSHI ENDP;子程序结束
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码
LEA DI,SHU
MOV CX,N
REPET:
PUSH CX
MOV AL,[DI]
PUSH AX;先把AX暂存一下,下面INT 21会破坏
AND AL,AL
JNS ZHENG
MOV DL,'-';负数,先把符号显示出来
MOV AH,02H
INT 21H
POP AX
NEG AL
ZHENG:
CMP AL,99
JBE LIANG
CBW;三位数,先把百位显示出来,假设128
MOV BH,100
DIV BH;百位是商1
MOV BL,AL;商放入BL
PUSH AX;暂存余数
CALL XIANSHI
POP AX;余数出来
MOV AL,AH;AH保存是余数28
CBW
MOV BH,10
DIV BH
MOV BL,AL;商是2十位
PUSH AX
CALL XIANSHI
POP AX
MOV BL,AH;余数8是个位
CALL XIANSHI
MOV DL,','
MOV AH,2
INT 21H;显示","
JMP XIA
LIANG:;两位数
CBW
MOV BL,10
DIV BL
MOV BL,AL;商——十位
MOV CL,AH;余数——个位
CALL XIANSHI;显示十位
MOV BL,CL
CALL XIANSHI;显示个位
;到此一个数显示完毕
MOV DL,','
MOV AH,2
INT 21H;显示","
XIA:
INC DI
POP CX
LOOP REPET; 去掉这一句就一切正常?请问怎么回事
MOV AH,4CH
INT 21H
CODES ENDS
END START
怎么没有人回复呀
[ 本帖最后由 jy1075518049 于 2012-11-14 15:11 编辑 ]