. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验11完成。。用的减20H。  [待解决] 回复[ 6次 ]   点击[ 431次 ]  
liuquanhao7232
[帖 主]   [ 发表时间:2010-08-11 10:49 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-07-12 08:47
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 cx
                push ax
                pushf
              s:mov al,[si]
                cmp al,61h
                jb next
                cmp al,7Ah
                ja next
                sub al,20h
                mov [si],al
           next:mov cx,[si]
                jcxz over
                inc si
                jmp short s
           over:popf
                pop ax
                pop cx
                ret
                
codesg ends
end begin
liuquanhao7232
[第1楼]   [ 回复时间:2010-08-11 10:50 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-07-12 08:47
当中的pushf和popf应该可以不用。但王爽老师说子程序应当尽量不影响主程序。所以既然学了,就用上了。。
masmaster
[第2楼]   [ 回复时间:2010-08-11 12:23 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
good~~~~
jjch224
[第3楼]   [ 回复时间:2010-08-13 10:40 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48
我的思路跟你的一样哈,不知有没其他的方法分享下。
hohos
[第4楼]   [ 回复时间:2010-11-11 22:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2010-10-25 00:34
mov cx,[si] 

这条语句有点小问题

应是 mov cl,[si]
mov ch,0

更好。。。


这道题 还可以像本书之前所说的 and byte ptr [si],11011111b 来实现小写转大写
b307077419
[第5楼]   [ 回复时间:2010-11-23 15:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-09-04 10:41
做的do--while格式
我做的while-do格式
qingfeng203
[第6楼]   [ 回复时间:2010-12-09 13:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-18 00:34
assume cs:code
data segment
 db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
begin:mov ax,data
 mov ds,ax
 mov si,0
 call letterc
 mov ax,4c00h
 int 21h
letterc:
 pushf
 push cx ;将子程序用到的寄存器入栈保存
 push si 
s3: mov ch,0
 mov cl,[si]  ;ds:[si]指向的内存单元送入cx检测
 jcxz ok
or cl,00100000b ;将所有的字符转化成小写字母
cmp [si],cl    ;将原来字符跟改写后的字符做比较
jne s           ;检测是否相等
and cl,11011111b ;相等后改为大写
mov [si],cl      ;将改写后的字符送回原单元
inc si            ;指向下一个内存单元
jmp short s3      ;跳转,循环检测
s:inc si          ;不相等时执行的指令
jmp short s3      ;跳转,循环检测
ok:pop si
   pop cx         ;恢复子程序开始前的寄存器数据
   popf
 ret        
code ends
end begin
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved