这个实验似乎简单很多,不知是否符合作者的原意图呢?
assume cs:codesg
data segment
;db "Beginner's All-purpos Symbolic Instruction code.",0
db "AaBb89_*&",0
data ends
codesg segment
start:
;
mov ax,data
mov ds,ax
mov si,0
;
call letterc
;退至dos
mov ax,4c00h
int 21h
;子程序
;程序名称:letterc
;功能:将以0结尾的字符串中的小写字母转变为大写
;参数:ds:si指向字符首地址
letterc:
;转换小写字母。
;小写字母的ascii码范围[97,122]或[61h,7ah]
;用到的寄存器:cx,计数,并判断是否结束转换
; al,用来临时存储字母,并比较
;入栈
push ax
push cx
;清空
mov ax,0
mov cx,0
;取一个字母
getOne:
mov al,[si]
mov cl,al ;送入cx
jcxz getOver
;不结束,则判断是否符合条件
cmp al,97
jb getNext ;如果小于则下一个
cmp al,122
ja getNext ;如果大于则下一个
;到此则说明在[97,122]区间
;转换,与dfh and之后写回
and al,0dfh
mov [si],al
;继续下一个
getNext:
inc si ;增1
;
jmp getOne
getOver:
;出栈
pop cx
pop ax
ret ;返回
codesg ends
end start
- [sbjcm33] 原来你是把实验1和2放一起的,好办法,我怎么没想到呢,把它们分成了两个程序。 具体的内容我就不看了 12/06 01:34
- [rotapple] 却没有放入段地址,而此处要明确的是:seg code 的含义是指段地址 ============= 06/23 16:56
- [Wednesday] 分析透彻,收藏!哈哈 11/09 17:26
- [Wednesday] 公布答案了,哈哈。 11/05 23:03
- [mqmelon] 不用客气,共同进步! 11/02 10:03
- [feemess] 谢谢指点.我的下一次答题要在32个小时之后了.一直都认为第一题没错.看来.要认真看书才是 10/28 00:08
- [mqmelon] 谢谢,我会努力去做. 10/27 23:18
- [游客] mqmelon同学,你能有这样的认识首先说明你的学习态度是对的,只要有正确的学习态度,就能够学好,以 10/25 11:56
- [sunshine] 呵呵 10/25 09:49
- [mqmelon] 谢谢,十分谢谢。 10/24 17:10