汇编网首页登录博客注册
fpamc的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2012-04-23 15:33] 实验十(一)

实验十
三个课本子程序,一个扩展子程序

show_str:                ;定义子程序
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围1~25)
;      (dl)=列号(取值范围1~80)
;      (cl)=颜色,ds:si指向字符串的首地址
;返回:无
        push cx
  push es
        push si
        push di          ;以上皆为保存主程序各寄存器的值
        mov ax,0b800h
        mov es,ax        ;设置显存段地址

        dec dh           ;行号在显存中,从0开始,所以减1
        mov al,0a0h      ;每行字节数     
        mul dh           ;计算行
        push ax          ;保存计算结果

        mov al,2         ;一个字符有两个字节
        mul dl           ;计算列
        sub ax,2         ;列号在显存中从0开始标号,又因为字符存在偶数中,所以减2

        pop di           ;将行的计算结果送入di中
        add di,ax        ;首字符,行列结果存在寻址寄存器中
        mov al,cl        ;将字符属性存放到al中,

show:
        mov cl,[si]      ;将字符存放在cl中
        mov ch,0         ;为jcxz判断字符提供条件
        jcxz ok          ;判断0
        mov ch,al        ;将字符属性放到ch中
        mov es:[di],cx   ;将字符和字符属性送到所指显存中
        inc si
        add di,2
        jmp short show   ;循环到show

ok:
        pop di
        pop si
  pop es
        pop cx           ;以上皆还原各寄存器数据
ret                      ;定义结束



divdw: ;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位
;      (dx)=dword型数据的高16位
;      (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位 (cx)=余数
        push bx          ;存储主程序中bx的值
        push ax          ;存储低16位dword型数据
        mov ax,dx        ;将dx高16位数据放入ax         mov dx,0         ;将dx置零
        div cx           ;计算高16位除法, 结果:ax存放高位商,dx存放余数
        mov bx,ax        ;存储高16位除法的商
        pop ax           ;还原低16位数据
        div cx           ;计算(余数+低16位)除法 结果:ax存放低16位商,dx存放余数
        mov cx,dx        ;将余数放入cx
        mov dx,bx        ;将高16位放入dx
        pop bx           ;还原主程序中bx的值
ret              ;返回主程序
评论次数(1)  |  浏览次数(149)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2012-04-23 23:09  ]

没问题。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码