8086 汇编笔记(六):更灵活的定位内存地址的方法

一、and 和 or 指令

and 指令:逻辑与指令,按位进行与运算(有 0 得 0,全 1 得 1)

复制代码
mov al,01100011B
and al,00111011B

结果:00100011B

or 指令:逻辑或指令,按位进行或运算(有 1 得 1,全 0 得 0)

复制代码
mov al,01100011B
and al,00111011B

结果:01111011B

二、以字符形式给出的数据

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

复制代码
data segment

    db 'unIX'        ;相当于 db 75H,6EH,49H,58H
    db 'foRK'

data ends

code segment

start:  mov al,'a'        ;相当于 mov al,61H
        mov bl,'b'

        mov ax,4c00h
        int 21h

code ends

end start

三、大小写转换的问题

在ASCII码中,小写字母的对应范围为:61H - 7AH。大写字母的对应范围为:41H - 5AH。可见同一个字母的大写形式的ASCII码比小写形式的ASCII码小20H。

仔细观察大小写字母所对应的ASCII吗二进制形式,可以发现如下规律:大写字母从右数第6位(从1开始计算)全为0,小写字母从右数第6位全为1。

综上我们可以总结出大小写转换的两种方式:

字母大小写转换方式1:

  1. 大写字母加上20h可转换为小写字母。
  2. 小写字母减去20h可转换为大写字母。

字母大小写转换方式2:

  1. 字母转大写:逻辑与11011111B。

  2. 字母转小写:逻辑或00100000B。

    datasg segment

    复制代码
     db 'BaSiC'              ;转大写
     db 'iNfOrMaTiOn'        ;转小写

    datasg ends

    codesg segment

    start: mov ax,datasg ;设置 ds 指向 datasg 段
    mov ds,ax
    mov bx,0 ;设置(bx)=0,ds:bx 指向'Basic'的第一个字母
    mov cx,5 ;设置循环次数5,因为'Basic'有5个字母

    s: mov al,[bx] ;将 ASCII 码从 ds:bx 所指向的单元中取出
    and al,11011111B ;与运算转大写
    mov [bx],al ;值重新送入 bx 中
    inc bx ;+1 指向下一个字符
    loop s

    复制代码
         mov bx,5             ;设置 (bx)=5,ds:bx 指向'iNfOrMaTion'的第一个字母
         mov cx,11

    s0: mov al,[bx]
    or al,00100000B
    mov [bx] al
    inc bx
    loop s0

    复制代码
         mov ax,4c00h
         int 21h

    codesg ends

    end start

四、[bx+idata]

这是一种"变量+常量"的寻址方式

bx+idata\]表示一个内存单元,它的偏移地址为(bx)+idata mov ax, [bx+200] 表示将一个内存单元的内容送入ax,这个内存单元的长度为2个字节(字单元),存放一个字,偏移地址为bx中的数值加上200,段地址在ds中 该指令的常用格式有: mov ax, [bx+200] mov ax, 200[bx] mov ax, [bx].200 ## 五、SI 和 DI 它俩的功能与 bx 相近 **SI和DI不能够分成两个8位寄存器来使用** ;(1) mov bx,0 mov ax,[bx] ;(2) mov si,0 mov ax,[si] ;(3) mov di,0 mov ax,[di] ## 六、**\[bx+si\] 和 \[bx+di\]** 这是一种"变量+变量"的寻址方式 常用指令格式: mov ax, [bx+si] mov ax, [bx][si] ## 七、**\[bx+si+idata\] 和 \[bx+di+idata\]** 这是一种"变量+变量+常量"的寻址方式 常用指令格式: mov ax, [bx+200+si] mov ax, [200+bx+si] mov ax, 200[bx][si] mov ax, [bx].200[si] mov ax, [bx][si].200 ## 八、**不同的寻址方式的灵活应用** 总结一下前面讲到的几种定位内存地址的方法(寻址方式): (1)\[idata\]用一个常量来表示地址,可用于直接定位一个内存单元; (2)\[bx\]用一个变量来表示内存地址,可用于间接定位一个内存单元; (3)\[bx+idata\]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元; (4)\[bx+si\]用两个变量表示地址; (5)\[bx+si+idata\]用两个变量和一个常量表示地址。

相关推荐
思成不止于此44 分钟前
【C++ 数据结构】二叉搜索树:原理、实现与核心操作全解析
开发语言·数据结构·c++·笔记·学习·搜索二叉树·c++40周年
碧海潮生_CC2 小时前
【CUDA笔记】03 CUDA GPU 架构与一般的程序优化思路(下)
笔记·架构·cuda
时代新威powertime2 小时前
等保三级|安全通信网络自评估指南
网络·安全·等保测评
EndingCoder2 小时前
会话管理与Cookie安全
redis·安全·缓存·it·cookie
钟屿2 小时前
Back to Basics: Let Denoising Generative Models Denoise 论文阅读学习
论文阅读·人工智能·笔记·学习·计算机视觉
d111111111d2 小时前
SPI通信协议--在STM32中介绍(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
愚昧之山绝望之谷开悟之坡3 小时前
业务接待-公务接待-商务接待
笔记
一位搞嵌入式的 genius3 小时前
RARP 协议深度解析:MAC 到 IP 的反向映射与技术演进
计算机网络·安全·网络通信·rarp协议
电子科技圈3 小时前
IAR与Quintauris携手推进RISC-V汽车实时应用的功能安全软件开发
嵌入式硬件·安全·设计模式·编辑器·汽车·risc-v
非著名架构师4 小时前
智慧气象护航:构建陆海空立体交通气象安全保障体系
大数据·人工智能·安全·疾风气象大模型4.0·疾风气象大模型·风光功率预测