|
发表于 2011-3-23 22:14:33
|
显示全部楼层
本帖最后由 china0008 于 2011-3-23 22:18 编辑
你letterc部分我没看到啥意思,19行那里,为啥要减20H ?
对于这个题目,最好不要使用对 flag有影响的命令。
我的源码:
- 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
- mov bx,0 ;初始化,用低8位暂存被比较值
- call letterc
-
- mov ax,4c00h
- int 21h
-
- letterc:
- mov bl,[si]
- cmp bl,00h
- je ok ;等于0就调到结束处,用于判断字符串的尾部。
- inc si
- cmp bl,61h
- jb letterc
- cmp bl,7ah
- ja letterc ; 本行+以上3行,判断从内存中读出的值,是不是小写字母。
- and bl,11011111b ;这句实现小写到大写的转换。
- mov [si-1],bl ;把转换好的值写回内存,地址为什么减1,看前面源码就知道了。
- jmp letterc
- ok:
- ret
-
- code ends
- end begin
复制代码 letterc部分思路是这样,先确定是否为需要转换的小写字母,如果是就转换,并写回内存。 |
|