|

楼主 |
发表于 2011-8-6 07:46:18
|
显示全部楼层
本帖最后由 只是丶梦 于 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就错误了
|
|