鱼C论坛

 找回密码
 立即注册
查看: 2859|回复: 0

[技术交流] 刚学会用栈做参数写了两个功能子程序

[复制链接]
发表于 2016-12-30 16:46:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 泡泡吧 于 2016-12-30 16:49 编辑

第一个向屏幕显示文本
第二个转换大小写字母
;功能名: show 
;说明: 向屏幕显示文本,以0结尾文本
;参数: push ax 文本,以零结尾
;参数: push ax 文本颜色,
;参数: push ax 行,从零开始 
;结果: 向指定行显示指定文本
;源码始:
show:   mov bp,sp          
        mov ds,[bp+6]  ;文本
        mov ax,0b800h  ;屏幕显示地址
        mov es,ax
        mov ax,[bp+2] ;行
        add ax,4 
        mov bx,160   ;第一行4*160
        mul bx
        mov bx,ax
        mov si,0
        mov di,0
show_s1:mov cl,ds:[di]     ;ds:[di]指向文本byte单元                 
        mov ch,0  
        jcxz s0            ;如果=0直接返回
        mov al,cl
        mov ah,[bp+4]      ;颜色
        mov es:[bx][si],ax ;显示
        add si,2
        inc di     
        loop show_si
show_s0:ret
;源码终

;功能名: capital 
;说明: 将字母转换大小写.以0结尾字母
;参数: push ax 字母
;参数: push 0and1  ;0表示大写,1表示小写
;结果: 字母的首地址保存在ax中
;源码始
capital:mov bp,sp
        mov ds,[bp+4];把字母放入ds中
        mov cx,[bp+2];
        mov si,0

        jcxz caps0 ;如果=0 转为大写 跳转到caps

caps1:  mov cl,ds:[si]        ;指向第一个字符
        mov ch,0
        jcxz caps2            ;如果=0跳出循环
        or byte ptr[si],00100000b
        inc si                ;ds:[si]下一个
        loop caps1
        jmp short caps2

caps0:  mov cl,ds:[si]        ;指向第一个字符
        mov ch,0
        jcxz caps2            ;如果=0跳出循环
        and byte ptr [si],11011111b
        inc si                ;ds:[si]下一个
        loop caps0
        jmp short  caps2

caps2:  mov ax,ds             ;(ax)=(ds)
        ret
;源码终
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 16:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表