|
主题 : : 实验11完成。。用的减20H。 [待解决] |
回复[ 6次 ]
点击[ 431次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-08-11 10:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2010-07-12 08:47 |
当中的pushf和popf应该可以不用。但王爽老师说子程序应当尽量不影响主程序。所以既然学了,就用上了。。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-08-11 12:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第3楼]
[ 回复时间:2010-08-13 10:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
|
|
|
|
|
[第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 来实现小写转大写 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-11-23 15:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-04 10:41 |
做的do--while格式
我做的while-do格式 | | |
|
|
|
|
[第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 | | |