第11章 实验11解析
检测点11.3
(1).补全下面的程序,统计F000:0处32个字节中,大小在[32,128]的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:mov al,[bx]
cmp al,32
jb s0 ;由于包含32,所以使用低于转移
cmp al,128
ja s0 ;由于包含128,所以使用高于转移
inc dx
s0:inc bx
loop s
(2).补全下面的程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:mov al,[bx]
cmp al,32
jna s0 ;由于不包含32,所以使用不高于转移
cmp al,128
jnb s0 ;由于不包含32,所以使用不低于转移
inc dx
s0:inc bx
loop s
实验11 编写子程序
编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母。
assume cs:code
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
code segment
start:mov ax,datasg
mov ds,ax ;ds指向数据段(字符串所在地址)
mov si,0 ;将si清零,后面使用si访问字符串
call letterc ;调用子程序,将小写字母改成大写字母
mov ax,4c00h
int 21h
letterc:mov ch,0 ;将ch清零
mov cl,ds:[si] ;将ds:[si]指向的字符放入cl中
jcxz ok ;判断是否为0,如果为0则说明字符串修改完毕
cmp cx,61H ;如果CX中的值低于61H,说明当前字符不是小写字符,无需修改
jb s ;跳转到标号s处执行
cmp cx,7aH ;如果CX中的值高于7aH,说明当前字符不是小写字符,无需修改
ja s ;跳转到标号s处执行
and cl,11011111B ;将小写字母改成大写字母后存入cl
mov ds:[si],cl ;将修改后的字母送回原地
s:inc si ;si+1指向下一个字符
jmp short letterc
ok:ret ;子程序返回
code ends
end start
将程序加载后使用D命令查看内存单元处内容如下:此时数据还未被修改。
运行程序后,再次使用D命令查看内存单元处内容如下:可看到此时小写字母已经被转换成大写字母。