本帖最后由 只是丶梦 于 2011-8-6 07:48 编辑 assume cs:code ds:data ss:stack
data segment
db 10 dup (0)
data ends
stack segment
dw 20 dup (0)
stack ends
code segment
start:mov bx,data
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,50h ;置栈顶
call dtoc ;执行子程序 dtoc
mov dh,7
mov dl,2
call show_str
mov ax,4c00h ;退出程序初始化
int 21h ;退出程序
dtoc:push ax
push di
push bx
mov ax,520 ;设置被除数
mov di,0 ;记录入栈次数
mov bx,10d ;设置除数
e:div bx ;除法 ax = 商 dx = 余数
add dx,30H ;余数转码+30h
push dx ;入栈
mov dx,0 ;清空余数
mov cx,ax ;cx = 商
inc di ;记录入栈次数
jcxz e2 ;判断商=0?
jmp e ;跳到e循环
e2:mov cx,bx ;设置入栈次数为循环次数
mov di,0
e3:pop bx ;出栈
mov ds:[di],bx ;存入数据
inc bx ;递增数据偏移
loop e3 ;循环e3
pop bx
pop di
pop ax
ret ;返回
show_str:push ax
push bp
push di
push cx
push si
push dx
mov ax,0B800h ;定义显存
mov es,ax ;设置es附加段
mov al,0A0h ;al=行号
mov ah,0 ;ah高位清零
mul dh ;乘法 ax = 行
mov bp,ax ;bp = ax行
mov al,2 ;al=列号
mov ah,0 ;ah高位清零
mul dl ;乘法 ax = 列
mov di,ax ;di = ax列
mov si,0 ;数据第1个
x:mov cl,[si] ;取数据
mov ch,0 ;高位清零
jcxz rem ;为0跳出
mov es:[bp+di],cl ;写入显存数据 基地址:行+列
mov cl,02h
mov es:[bp+di+1],cl ;写入显存属性 基地址:行+列+1
add di,2 ;进入下一列
inc si ;递增 取数据偏移
jmp x ;跳到X 循环
rem:pop dx
pop si
pop cx
pop di
pop bp
pop ax
ret ;返回
code ends
end start
好像放几下我都有点忘了没写全 在debug就错误了
|