《汇编语言(第三版)》王爽笔记(7)更灵活的定位内存地址的方法

第七章 更灵活的定位内存地址的方法

and指令:按位进行 ‘与’ 运算
eg
mov al, 01100011B
and al, 00111011B
结果为 al=00100011B
可以通过and运算将操作对象的相应位置0. 如希望al第3位(从0开始数)为0,则使用 and al, 11110111B
or指令:按位进行‘或’运算
举例略,可以通过该指令将运算对象的相应位置置1.
or al, 00000100B (将第2位置1)

ASCII编码:当我们在文本编辑器中敲下‘a’,计算机将其转成61H存储在内存的指定空间;文本编辑器从内存中取出61H,送入显卡的显存;工作在文本模式下的显卡,用ASCII码规则解释61H,驱动显示器,把‘a’送上屏幕。

在汇编程序中,我们用 ’ … ’ 指明数据以字符形式给出,编译器会自动将其转化为ASCII码。eg
db ‘unIX’ 相当于 db 75h, 6eh, 49h, 58h
大小写字母的ASCII码区别:转化为二进制后,小写字母第5位为1,大写字母第五位为0. 可以不需要判断,利用and和or指令进行大小写转换。
and al, 11011111B 转大写
or al, 00100000B 转小写

另一种取址方式:[bx+idata]
mov ax,[bx+200]
含义:将偏移地址为BX+200位置开始的两个内存单元中的内容赋给AX。
同样含义的其他写法:mov ax,[200+bx]
mov ax, 200[bx]
mov ax, [bx].200
[bx+idata]的取址方式为高级语言实现数组操作提供了便利机制。

SI和DI是8086中与BX功能相近的寄存器,但SI和DI不能分成两个8位寄存器使用。
更灵活的寻址方式:[bx+si], [bx+di]
mov ax, [bx+si]
另一种写法: mov ax, [bx] [si]

[bx+si+idata], [bx+di+idata]
mov ax, [bx+si+200]
别的写法:
mov ax, [200+bx+si]
mov ax, 200[bx][si]
mov ax, [bx] .200[si]
mov ax, [bx][si].200

在这里插入图片描述

写嵌套循环时,应在内层循环开始前保存外层循环的CX值,并在内层循环结束后将值重新赋给CX。避免因为重复使用CX导致循环混乱。
用哪个寄存器来暂存CX?寄存器只有14个,一旦程序比较复杂,尽量不要用寄存器暂存数据。考虑使用内存。 在数据段开辟一段空间,用于暂存数据。更复杂的情况下,暂存数据很多,需要记住数据的位置。一般情况下,需要暂存数据的时候,使用栈。

实验6

assume cs:codesg,ds:datasg,ss:stacksg

stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends

datasg segment
db '1. display      '
db '2. brows        '
db '3. replace      '
db '4. modify       '
datasg ends

codesg segment
start:
	mov ax,stacksg
	mov ss,ax
	mov sp,16
	mov ax,datasg
	mov ds,ax
	mov bx,0
	mov cx,4
	
	s0:push cx
	mov si,0
	mov cx,4
	
	s:mov al,[bx+si+3]
	and al,11011111b
	mov [bx+si+3],al
	inc si
	loop s
	
	add bx,16
	pop cx
	loop s0
	
	mov ax,4c00h
	int 21h

codesg ends
end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值