要求将数据段的数字,显示在屏幕的指定位置上。显示《红底绿字》。
题目链接:http://zhidao.baidu.com/question/541265076.html
程序如下:
ASSUME CS:CODE, DS:DATA, SS:STACK
;-----------------------------------
DATA SEGMENT
DW 123, 12666, 1, 8, 3, 38
DATA ENDS
;-----------------------------------
STACK SEGMENT
DB 16 DUP(0)
STACK ENDS
;-----------------------------------
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV SP, 16
;-----------------------
MOV SI, 0
MOV DI, 506H ;显示屏的偏移地址
MOV CX, 6 ;数据段的6个数据
S1:
PUSH CX
CALL DTOC ;调用函数,将整型转化为字符串,在显示屏显示
ADD SI, 2
ADD DI, 2 ;DI指向下一个显示的位置
POP CX
LOOP S1
MOV AX, 4C00H
INT 21H
;-----------------------------------
DTOC:
MOV AX, [SI]
MOV BX, 10
MOV CX, 0
D_LOOP1:
SUB DX, DX ;DX清零
DIV BX
PUSH DX
INC CX
CMP AX, 0
JNZ D_LOOP1
MOV AH, 2
D_LOOP2:
POP DX
CALL SHOW_STR ;每求的一个余数就调用显示函数
LOOP D_LOOP2
RET
;-----------------------------------
SHOW_STR: ;显示每个数据除10后的余数功能
MOV BX, 0B800H
MOV ES, BX
ADD DX, 4A30H ;余数转化为ASCII码进行显示
MOV ES:[DI], DX
ADD DI, 2 ;DI指向下一个显示的位置
RET
;-----------------------------------
CODE ENDS
END START
程序执行后,显示截图如下: