更灵活定位内存地址

166 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 目录

image.png  

7.1and和or指令

and指令的一点小作用

image.png or指令的一点功能

image.png  

7.3以字符形式给出的数据

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

 

 

image.png  

大小写字母ASCII码规律

image.png 除第六位外,其余位的值都一样

 

将字母第六位置0,无论他原来是大写还是小写,都必将变为大写字母

将第六位置1,则必变为小写字母

Eg:

例如 BasIc转化为小写字母

第六位置零(转大写字母)

or [bx],00100000b

第六位置1(转小写字母)

and [bx],11011111b

 

and操作对象组合

AND destination,source

mem: memory的简写,表示内存单元

reg: register的简写,表示寄存器

imm:立即数(常数)

下列是被允许的操作数组合,但是立即操作数不能超过 32 位:

AND reg, reg

AND reg, mem

AND reg, imm

AND mem, reg

AND mem, imm

image.png 在8086CPU中 and对象不能为 mem,imm

 

assume cs:code,ds:data
data segment
db 'a','b','C'
code segment
start:	mov ax,data
		mov ds,ax
		mov bx,0
		mov cx,3
	s:	and [bx],20h
		inc bx
		loop s
		mov ax,4c00h
		int 21
code ends
end start

image.png 以二进制形式写出也可以(更直观)

 

 

7.5[bx+idata]

mov ax,[bx+200]

取长度为2字节的内存单元的内容送入ax中,因为ax是16位寄存器

 

image.png  

不同的格式

image.png [200+bx]

200[bx]

[bx].200

 

问题7.1

为什么要拆分成两段?

image.png

 

无需对bx进行自加1,inc bx

 

[bx+idata]可以用来索引数组

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

数组是在内存中连续的区域

索引方式是数组名(地址)

image.png [bx+idata]可以用来索引数组???

 

 

进行mov,and,or等操作时最好使用通用寄存器

 

[0+bx]和[5+bx]在同一循环中定位这两个字符串中的字符

在这里,0和5给定了两个字符串的起始偏移地址,bx中国给出了从起始偏移地址开始的相对地址。

image.png 针对Information、BasIC的改大小写代码

image.png