汇编语言学习笔记四

文章介绍了ASCII码如何表示字符,并通过汇编语言中的AND和OR指令来改变字符的大小写。示例代码展示了如何将HeLLo变为全小写,WorlD变为全大写,同时解释了不同类型的寄存器在内存寻址中的作用,以及字节和字型数据的处理方式。
摘要由CSDN通过智能技术生成

字符

字符是以ASCII码的形式存储的,一个字符对应着8为二进制数,2位16进制数。
所以可以得到对应的字符地址。

assume ds:data
data segment
	db 'hello'
	db 'world'
data ends

and or指令

根据ASCII码,字符的大写和小写相差一个0010 0000,比如a对应的ASCII码是0110 0001,那么A则对应的是0100 0001,对比可以发现他们只是第5位不同,第5位为1,则是小写,否则是大写。
现在通过改变字符的大小写来熟悉and和or的用法,下面将HeLLo全变成小写,WorlD全变成大写。
and 是置0
or是置1

assume cs:code, ds:data
data segment
	db 'HeLLo'
	db 'WorlD'
data ends

code segment
start:
	mov ax, data
	mov ds, ax
	mov bx, 0
	mov cx, 5
	
s:
	mov ax, [bx]
	and ax, 11011111b;如果第5位为1的话,那么将其置为0,即将其变为大写
	mov [bx], ax;将ax存到[bx]对应的内存单元中,注意这里不是将其存到bx寄存器中

	mov ax, [5+bx]
	or ax, 00100000;如果第5位为0的话,那么将其置为1,即将其变为小写
	mov [5+bx], ax
	inc bx
	jmp s

code ends
end start

mov ax, [bx]放入ax中的是字节型数据。
mov ax, [bx+200]放入ax中的是字型数据。

寄存器SI和DI

SI和DI的功能和bx的功能类似,但这两个寄存器不能分为两个8位的寄存器来使用。
mov ax, [bx+di]或者mov ax, [bx+si]放入ax的是字型数据。
该指令也可以写成mov ax, [bx][di]

BX、SI、DI和BP寄存器

  1. 这四个寄存器都可以用[]这样的形式寻址。其余的ax、cx、dx以及ds都不能用来寻址。
  2. BX和BP只能选择一个和SI和DI搭配或者四个自己单独出现,并且SI和DI不能搭配。
  3. 使用BP时,默认的段地址在SS中。

特别补充

在这里插入图片描述
如图可见,其内存的物理地址为10000-10003H,地址信息也可以表示为1000: 0-1000: 3

assume cs:codeseg, ds:dataseg
dataseg segment
	db 23h, 11h, 22h, 66h
dataseg ends

codeseg segment
	mov ax, 1000h
	mov ds, ax
	mov bx, 0
	mov cx, 4
	mov ax, [bx]
	mov ax, [bx+1]
	mov ax, [bx+2]
	mov ax, [bx+3]
	
codeseg ends

end

执行下面四条语句时,对应的ax的值为0023h, 1123(字型数字,地址高位在前,低位在后), 2211, 6622
mov ax, [bx]
mov ax, [bx+1]
mov ax, [bx+2]
mov ax, [bx+3]

指令mov ax, [bx+si]以及mov ax, [bx,+si+10]和mov ax, [bx]都是类似的,特别注意的是这个字型数据,始终记住内存地址是以8位二进制数为刻度的,即偏移+1,内存中的数据的位数走8位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值