Chinaunix首页 | 论坛 | 博客
  • 博客访问: 688958
  • 博文数量: 156
  • 博客积分: 3402
  • 博客等级: 中校
  • 技术积分: 1639
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-13 14:06
个人简介

业余编程爱好者

文章分类

全部博文(156)

文章存档

2014年(1)

2013年(13)

2012年(46)

2011年(38)

2010年(58)

分类: WINDOWS

2011-12-14 10:50:26

《汇编语言》10.11节,写出一个大小写转换的程序,需要通过调用子程序。我优化了写法,并增加了屏显子程序以确认转换结果。离Forth系统的结构越来越近了,接下来是将堆栈作为参数传递接口。
 
        org     0100h
start@:
        call    capital@               ;调用转换为大写字符子程序
        call    print@                 ;调用屏显子程序
        jmp     $
        mov     ax,4c00h
        int     21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
print@:                                 ;屏显子程序,将data区里的字符显示在屏幕上
        mov     ax,cs
        mov     ds,ax
        mov     bx,dataStart@
        mov     si,140h+30h
        mov     cx,dataEnd@-dataStart@
s@:     mov     dl,[bx]
        mov     dh,11001010b
        mov     ax,0b800h
        mov     ds,ax
        mov     [ds:si],dx
        mov     ax,cs
        mov     ds,ax
        add     bx,1
        add     si,2
        loop    s@
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
capital@:                               ;大小写转换子程序,将data区的字符全部转换成大写
        mov     ax,cs
        mov     ds,ax
        mov     si,dataStart@
        mov     cx,dataEnd@-dataStart@
cap@:
        mov     al,11011111b
        and     [si],al
        inc     si
        loop    cap@
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dataStart@:                             ;data区,存放要处理的数据
        db 'Welcome to fasm!I am here!'
dataEnd@:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
阅读(1288) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~