. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验11  完成  [待解决] 回复[ 2次 ]   点击[ 368次 ]  
zhenglxd
[帖 主]   [ 发表时间:2009-06-01 10:39 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
;实验11 编写子程序
;编写一个子程序,将包含任意字符,以0结尾的的字符窜中的小写字母转;变成大写字母。
;参数 ds:si 指向首地址
assume cs:codesg

datasg segment

  db"Beginner's All-purpose symbolic Instruction Code.",0

datasg ends

codesg segment
begin:mov ax,datasg
      mov ds,ax
      mov si,0
      call letterc

      mov ax,4c00H
      int 21H


letterc:                 ; 保存相关寄存器数据
        push si
        push cx
        
        dec si
lcs:    inc si
        mov ch,0            
        mov cl,ds:[si]    ;验证是否为0
        jcxz overlc       ;是的话跳转,否pass

        cmp byte ptr ds:[si],61H ;验证是否小于61H
        jb lcs
        cmp byte ptr ds:[si],7aH ;验证是否大于7aH
        ja lcs
        and byte ptr ds:[si],11011111B ;进行转换大写
        jmp lcs

overlc:pop cx             ;还原相关寄存器数据
       pop si
       ret                 

codesg ends

end begin


;我写的有点笨拙了,cx其实可以不用,用cmp ds:[si],0  和 jz 替代但是 写的时候一个2行代码一个3行代码 觉得差不多 就没改了 嘿嘿
younggay
[第1楼]   [ 回复时间:2009-06-01 11:10 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
不错,顶。
liucuan11
[第2楼]   [ 回复时间:2009-06-01 15:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-06 21:40
写得不错,比我好,用了PUSH和POP,保证了栈平衡,这个习惯要保持
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved