ASSUME CS:CODE,DS:DATA
DATA SEGMENT
DB 8 DUP (0)
DATA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV AX,12666
MOV SI,0 ;指向DATA段首地址
CALL DIVDW
MOV DH,3 ;定义第三行
MOV DL,4 ;定义第四列
MOV CL,2 ;显示效果为黑底绿字
CALL SHOW_STR ;计算数值的ASCII的总位数及写进数据段的偏移
MOV AX,4C00H
INT 21H
DIVDW:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV DI,0
F10: PUSH AX
MOV AX,DX ;将被除数高16位存入AX,先进行高16位的运算
MOV CX,10
MOV DX,0 ;被除数高16置0
DIV CX
MOV BX,AX
POP AX
DIV CX
ADD DX,30H
PUSH DX
MOV DX,BX
MOV CX,AX ;检测低16位商是否为0,为O则跳AAC检测高16位
INC DI ;用来计算显示数据的总位数
JCXZ AAC
JMP F10 ;商不为0跳转F10继续执行
AAC: MOV CX,DX ;当高低位商都为0跳转CZY执行
JCXZ CZY
JMP F10
CZY:
MOV CX,DI ;将DI计算的数据总位数放入CX作为循环计数器
CXY: POP AX
MOV DS:[SI],AL ;将数字的ASCII码写进0开头的DS数据段
INC SI
LOOP CXY
MOV AL,0
MOV DS:[SI],AL
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
SHOW_STR: ;显示字符数字到屏幕
MOV AL,160
DEC DH
MUL DH
MOV BX,AX
DEC DL
MOV AL,2
MUL DL
ADD BX,AX ;计算出屏显的坐标存在BX
MOV DH,CL
MOV AX,0B800H ;将ES段作为显存段
MOV ES,AX
MOV CL,0
RT:
MOV CH,[SI]
JCXZ VW
MOV ES:[BX],CH ;单步调试到这里出的问题,无法写进显存
MOV ES:[BX+1],DH ;写进显存中的数据与内存中不符
INC SI
ADD BX,2
JMP RT
VW: RET
CODE ENDS
END START
麻烦高手们帮调试下
DATA SEGMENT
DB 8 DUP (0)
DATA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV AX,12666
MOV SI,0 ;指向DATA段首地址
CALL DIVDW
MOV DH,3 ;定义第三行
MOV DL,4 ;定义第四列
MOV CL,2 ;显示效果为黑底绿字
CALL SHOW_STR ;计算数值的ASCII的总位数及写进数据段的偏移
MOV AX,4C00H
INT 21H
DIVDW:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV DI,0
F10: PUSH AX
MOV AX,DX ;将被除数高16位存入AX,先进行高16位的运算
MOV CX,10
MOV DX,0 ;被除数高16置0
DIV CX
MOV BX,AX
POP AX
DIV CX
ADD DX,30H
PUSH DX
MOV DX,BX
MOV CX,AX ;检测低16位商是否为0,为O则跳AAC检测高16位
INC DI ;用来计算显示数据的总位数
JCXZ AAC
JMP F10 ;商不为0跳转F10继续执行
AAC: MOV CX,DX ;当高低位商都为0跳转CZY执行
JCXZ CZY
JMP F10
CZY:
MOV CX,DI ;将DI计算的数据总位数放入CX作为循环计数器
CXY: POP AX
MOV DS:[SI],AL ;将数字的ASCII码写进0开头的DS数据段
INC SI
LOOP CXY
MOV AL,0
MOV DS:[SI],AL
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
SHOW_STR: ;显示字符数字到屏幕
MOV AL,160
DEC DH
MUL DH
MOV BX,AX
DEC DL
MOV AL,2
MUL DL
ADD BX,AX ;计算出屏显的坐标存在BX
MOV DH,CL
MOV AX,0B800H ;将ES段作为显存段
MOV ES,AX
MOV CL,0
RT:
MOV CH,[SI]
JCXZ VW
MOV ES:[BX],CH ;单步调试到这里出的问题,无法写进显存
MOV ES:[BX+1],DH ;写进显存中的数据与内存中不符
INC SI
ADD BX,2
JMP RT
VW: RET
CODE ENDS
END START
麻烦高手们帮调试下