汇编语言(王爽版)学习笔记 第七章 更灵活的定位内存地址的方法(1)

7.1 and和or指令

  1. and指令:逻辑与指令,按位进行运算。
    在这里插入图片描述
    通过该指令可以将操作对象的相应位设为0,其它位不变。
    在这里插入图片描述
  2. or指令:逻辑或指令,按位进行或运算。
    在这里插入图片描述
    通过该指令可将操作对象的相应位设为1,其他位不变。
    在这里插入图片描述

7.2关于ASCII码

世界上有很多编码方案,有种方案叫做ASCII编码,是在计算机系统中通常被采用的。

简单的说,所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。

在这里插入图片描述


7.3以字符形式给出的数据

我们可以在汇编程序中,用’…'的方式指明数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCII码。

在这里插入图片描述


7.4大小写转化的问题

在这里插入图片描述

assume cs:codesg,ds:datasg
datasg segment
	db 'BaSiC'
	db 'iNfOrMaTiOn'
datasg ends

codesg segment
	start:mov ax,datasg
		mov ds,ax	;ds指向datasg段
		mov bx,0	;设置(bx)=0,ds:bx指向'BaSiC'的第一个字母
		mov cx,5	;设置循环次数为5,因为'BaSiC'有5个字母
	s:mov al,[bx]	;将ASCII码从ds:bx所指向的单元中取出
	  and al,11011111B	;将al中的ASCII码的第5位置为0,变为大写字母
	  mov [bx],al	;将转变后的ASCII码写回原单元
	  inc bx	;(bx)加1,ds:bx指向下一个字母
	  loop s
	  
	  mov bx,5	;设置(bx)=5,[5]是第二串字符的第一个字母,应为第一串字符是[0]-[4]
	  mov cx,11
	s0:mov al,[bx]
	   or al,00100000B	;将al中的ASCII码的第5位置为1,变为小写字母
	   mov [bx],al
	   inc bx
	   loop s0
	   
	   mov ax,4c00h
	   int 21h
	   
codesg ends
end start

7.5[bx+idata]

[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata

mov ax,[bx+200]
表示将一个内存单元的内容送入ax,这个内存单元的长度为2字节(一个字单元),存放一个字。
偏移地址为bx中的数据加上200,段地址在ds中

数学化的描述为:(ax)=((ds)*16+(bx)+200)

指令mov ax,[bx+200]也可以写出如下格式:

  • mov ax,[200+bx]
  • mov ax,200[bx]
  • mov ax,[bx].200

问题7.1

在这里插入图片描述
分析:
在这里插入图片描述


7.6 用[bx+idata]的方式进行数组的处理

我们观察datasg段中的两个字符串,一个的起始地址为0,另一个的起始地址为5。
我们可以将这两个字符串看作两个数组,一个从0地址开始存放,另一个从5开始存放。
我们可以用[0+bx]和[5+bx]的方式在同一个循环中定位这两个字符串中的字符。

assume cs:codesg,ds:datasg
datasg segment
	db 'BaSiC'
	db 'iNfOr'
datasg ends

codesg segment
	start:mov ax,datasg
		mov ds,ax
		mov bx,0
		mov cx,5
	s:mov al,[bx]		;相当于[0+bx]
		and al,11011111b
		mov [bx],al
		mov al,[5+bx]
		or al,00100000b
		mov [5+bx],al
		inc bx
		loop s
	   mov ax,4c00h
	   int 21h
	   
codesg ends
end start
发布了112 篇原创文章 · 获赞 77 · 访问量 9579

猜你喜欢

转载自blog.csdn.net/weixin_43092232/article/details/105295375