. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验11详解  [已解决] 回复[ 2次 ]   点击[ 1108次 ]  
masmaster
[帖 主]   [ 发表时间:2010-07-28 17:12 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
看了很多同学的实验, 谈谈我的解法。
;-------------------------------------------------------------------------------------
  1 assume  cs:code
  2 data    segment
  3         db      'There are some string{[!~>_<~!]}',0 
  4 data    ends
  5 code    segment
  6 start:
  7         mov ax,data
  8         mov ds,ax                                  ;指定数据段
  9         mov si,0                                   ;DS:SI指向首地址
 10         call letterc                               ;转换
 11         call show                                  ;显示
 12         mov ah,4ch
 13         int 21h
 14 letterc:
 15         push ax                                    ;保护子程序用到的寄存器
 16         push si                                    ;
 17 s:      mov al,[si]                                ;将字符装入al中
 18         cmp al,0                                   ;如果没有字符
 19         jz ok                                      ;则结束转换
 20         cmp al,'a'                                 ;如果al<a
 21         jb s1                                      ;则跳至s1处
 22         cmp al,'z'                                 ;如果al>z
 23         ja s1                                      ;则跳至s1处
 24         and al,11011111b                           ;现在:z≤al≥a
 25         mov [si],al                                ;转换
 26 s1:     inc si                                     ;指向下一个字符
 27         jmp s                                      ;跳转s处,继续下一轮循环
 28 ok:     pop si                                     ;转换结束
 29         pop ax                                     ;恢复寄存器
 30         ret                                        ;返回调用
 31 show:              ;不做解释啦                        
 32         push si
 33         push ax
 34         push dx
 35 sh:     mov dl,[si]
 36         cmp dl,0
 37         jz done
 38         mov ah,2
 39         int 21h
 40         inc si
 41         jmp sh
 42 done:   pop dx
 43         pop ax
 44         pop si
 45         ret
 46 code    ends
 47 end     start
;-------------------------------------------------------------------------------------
int20
[第1楼]   [ 回复时间:2010-08-07 06:40 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-07-25 14:15
很好.
masmaster
[第2楼]   [ 回复时间:2010-08-09 13:58 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
此贴由 贴主 于 [ 2010-08-09 13:58 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(int20):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved