|
主题 : : 实验10第3题,这的显示成这样算完成了吗? [已解决] |
回复[ 3次 ]
点击[ 424次 ] | |
荣誉值:0
信誉值:2
注册日期:2009-07-06 17:12 |
assume cs:a,ds:b,ss:c
b segment
dw 123,12666,1,8,3,38
b ends
c segment
dw 100 dup (0)
c ends
d segment
dw 200 dup (0);定义200个字符区域,以存储要显示的字符串
d ends
a segment
start: mov ax,b
mov bp,0
mov ds,ax
mov ax,c
mov ss,ax
mov sp,200
mov ax,d
mov es,ax;存储字符串的内存地址
mov bx,0
mov di,0
call divter
call xianshi
mov ax,4c00h
int 21h
divter: mov ax,[bx];改用32位除法以保证商的存储
mov cx,ax
jcxz t;如果检测到为0的值则结束转换过程
mov dx,0
mov si,10
g: div si
mov cx,ax
add dx,30h
push dx;不论结果如何每次的余数都必须存储
mov dx,0
add bp,1
jcxz exit;如果商为0则跳转到下一个操作数,否则继续进行除法运算。
jmp near ptr g
exit: mov cx,bp
i: pop es:[di]
add di,2
loop i
mov word ptr es:[di],0
mov bp,0;清0,以计算第二个数据压入的次数
add bx,2;bx加2,以指向下一个操作数
jmp near ptr divter
t: ret
xianshi:mov bx,0
mov dh,8;代表行数
mov dl,3;代表列数
mov cl,2;绿色字符
mov si,0
mov di,0
mov ax,0b800h
mov ds,ax;显存段地址
mov al,160
sub dh,1
;将行数减1存入dh中,以备计算该行的偏移地址。
mul dh;计算行的偏移地址,其结果在默认在AX中。
mov bx,ax;将ax的值赋予bx,以计算列地址
;计算列数地址
mov al,2;存入列数基值
mul dl;计算列地址,结果存在ax中。
sub ax,2
add ax,bx;行地址和列地址相加取得最终偏移地址
mov di,ax
mov bl,cl;存储字符颜色
s: mov cl,es:[si]
mov ch,0
jcxz p
mov al,es:[si]
mov ds:[di],al
mov byte ptr ds:[di+1],bl
add di,2
add si,2
jmp short s
p:ret
a ends
end start | | |