问题1:将data段中的第一个字符串转换成大写,第二个字符串转换成小写
分析:
如何转换成大小写
- 如果利用ASCII码进行转换的话,需要判断该字符是大写还是小写,汇编语言实现太过困难,可以对字符串的二进制进行分析。
- 在ASCII码中,大写字母的第五位为0,小写字母的第五位为1,可以对位取反进行大小写转换
assume cs:code,ds:data
data segment
db 'BaSiC'
db 'InfoMaTion'
data ends
;------------------------------------
;做法一
code segment
start: mov ax,data
mov ds,ax
mov bx,0 ;设置ds:bx指向数据段
mov cx,5 ;对于第一个字符串进行循环转换
s: mov al,ds:[bx]
and al,11011111B ;将字符的第五位转换成0,转换成大写字母
mov ds:[bx],al
inc bx
loop s
mov bx,5 ;指向第二个字符串
mov cx,11
s0: mov al,ds:[bx]
or al,00100000B ;将字符的第五位转换成1,转换成小写字母
mov ds:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
;------------------------------------
;做法二,改进版:利用bx+idata实现代码的简化
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov cx,5
s: mov al,ds:[bx]