汇编实验10(3)没用正常结束
本帖最后由 枫叶情 于 2014-7-15 02:49 编辑汇编实验10(3)没用正常结束,求大神帮忙解决。谢谢!
代码:
assume cs:code, ds:data
data segment
db 10 dup (0)
data ends
code segment
start: mov ax, 12666
mov bx, data
mov ds, bx
mov si, 0
call dtocl
mov dh, 8 ;设置显示的行
mov dl, 3;设置显示的列
mov cl, 4;设置颜色为红色
mov di, 0;将目标偏移地址置0
call show
mov ax, 4c00h
int 21h
show:
mov ax, 0b800h ;设置显存地址
mov es, ax;将显存的地址给es
mov ax, 160 ;每行的有160字节
mul dh ;乘以dh得到行
mov bx, ax;将行给目标偏移地址
mov ax, 2;两个字节为一列
mul dl ;乘以dl得到列
add bx, ax;将列加入到目标偏移地址锁定行跟列的偏移地址
mov al, cl
mov cl, 0
s1: mov ch, ;将源地址中的ascii码给到显存的偏移地址
jcxz return
mov es:, ch
mov es:, al ;设置显示的属性
inc si
add bx, 2
loop s1
return: ret
dtocl: push ax
push bx
push cx
push dx
push si
push di;将寄存器的值保存避免子程序影响主程序
mov bx, 0;用作记位数
d1: mov cx, 0ah
mov dx, 0;高位置0
div cx ;除以10
mov cx, ax ;判断商是否为0
jcxz d2;如果为0则跳转到d2
add dx, 30h ;将余数加上30变为ascii码
push dx
inc bx ;bx递增1 用作计数
jmp short d1
d2: add dx, 30h ;将商为0的余数变为ascii码
push dx
inc bx
mov cx, bx;将位数给cx用作循环次数
mov si, 0
d3: pop ax ;取出栈中的数据
mov ds:, al ;将低位给目标位置
inc si ;目标偏移地址加1
loop d3
ok: pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start
把show子程序中的 loop s1 改为jmp s1就行了 支持一个。。。
页:
[1]