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+sibx+di

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

常用指令格式:

复制代码
mov ax, [bx+si]
mov ax, [bx][si]

七、bx+si+idatabx+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用两个变量和一个常量表示地址。

相关推荐
柳鲲鹏22 分钟前
运气学概论:提纲草案
笔记
Bruce_Liuxiaowei2 小时前
2026年9月第2周网络安全形势周报
网络·安全·web安全·网络安全·漏洞评级
hasty3 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
疯狂打码的少年3 小时前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
小杨不想秃头3 小时前
《信息安全工程师教程(第2版)》通关笔记
安全
XLYcmy4 小时前
面向安全领域决策的大型语言模型漏洞价值评估对齐机制与智能化评级系统研发 研究方向与核心内容
网络安全·llm·sft·cve·cot·对齐·漏洞检测
自小吃多4 小时前
PCB Editor软件复制、改变、删除操作笔记
笔记·嵌入式硬件
workflower5 小时前
人形机器人安全伦理标准
人工智能·安全·机器学习·机器人·无人机
动词ing6 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
彧azz6 小时前
Git 入门实操实例:从安装到远程仓库全流程
大数据·笔记·git·学习·elasticsearch