字符
字符是以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寄存器
- 这四个寄存器都可以用[]这样的形式寻址。其余的ax、cx、dx以及ds都不能用来寻址。
- BX和BP只能选择一个和SI和DI搭配或者四个自己单独出现,并且SI和DI不能搭配。
- 使用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]文章来源:https://www.toymoban.com/news/detail-435393.html
指令mov ax, [bx+si]以及mov ax, [bx,+si+10]和mov ax, [bx]都是类似的,特别注意的是这个字型数据,始终记住内存地址是以8位二进制数为刻度的,即偏移+1,内存中的数据的位数走8位文章来源地址https://www.toymoban.com/news/detail-435393.html
到了这里,关于汇编语言学习笔记四的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!