马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Zero_One 于 2012-5-7 22:25 编辑 assume cs:code,ds:data,ss:stack
data segment
dw 8 dup (0)
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
MOV AX,12666
mov si,0
call near ptr divdw
mov dh,3 ;定义第三行
mov dl,4 ;定义第四列
mov cl,00000010b ;显示效果为黑底绿字
CALL near ptr STRY
mov ax,4c00h
int 21h
divdw:
PUSH AX
mov ax,dx ;将被除数高16位存入AX,先进行高16位的运算
mov dx,0 ;被除数高16置0
mov cx,10 ;设置除数为10
DIV CX
MOV BX,AX ;高16位的商暂存BX
POP AX
DIV CX
PUSH DX ;最终算出的余数,压入栈中
MOV DX,BX
INC SI ;用来计算数据的总位数
MOV CX,AX
JCXZ OK
JMP DIVDW
OK: MOV CX,SI ;将数据总位数确定为循环次数
MOV BX,0
OK1: POP AX
ADD AL,30H
MOV [BX],AL INC BX
LOOP OK1
RET
STRY: ;显示字符数字到屏幕
MOV al,160
DEC DH
MUL DH
MOV BX,AX
DEC DL
MOV al,2
MUL DL
ADD BX,AX ;确定输出显存位置坐标
MOV AX,0B800H ;定义es段为显存段地址
MOV ES,AX
MOV AH,CL ;将字体颜色存入AH
MOV CX,SI ;SI中放的是显示数据的总位数
MOV SI,0
STRY1: MOV AL,ds:[SI]
MOV ES:[BX],AL ;单步调试到这里出的问题,无法写进显存
MOV ES:[BX+1],AH ;请高手帮忙分析下下,弄不明白
INC SI
add bx,2
LOOP STRY1
RET
code ends
END START
麻烦高手们给看下,输出到屏幕的结果不对,单部调试没问题,除法运算时也没问题 |