汇编语言(王爽 第三版)实验11 编写子程序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhaixh_89/article/details/101012382

编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。

名称:letterc

功能:将以0结尾的字符串中的小写字母转变成大写字母

参数:ds:si指向字符串首地址

应用举例:

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:   :
           :

codesg ends

end begin

程序分析:

1.在数据段定义了一个字符串,注意这个字符串不光是有大小写字符,还有其他字符,并以0结尾。

2. 判断字符串中的字符是否是小写字母?因为小写字母‘a’~‘z’是连续的ASCII码

3.如果是小写字母使用and 11011111b指令转换成大写的。

汇编代码如下:

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 es, ax
		  mov di, 0
		  
		  call letterc
		  
		  mov ax, 4c00h
		  int 21h
		  
  letterc:push si
		  
	 comp:cmp byte ptr [si], 0
		  je ok
		  cmp byte ptr [si], 61h
		  jb next
		  cmp byte ptr [si], 7ah
		  ja next
		  and byte ptr [si], 11011111b

	 next:inc si
	      jmp short comp
	   ok:pop si
	      ret
code ends

end begin

执行前内容为:

执行后结果为:

实验主要考察对cmp指令的运用

猜你喜欢

转载自blog.csdn.net/zhaixh_89/article/details/101012382