java打印对象内存地址 分布式事务 事务消息 分布式事务 几种解决方案 分布式事务-Seata 分布式事务-Seata 分布式事务-LCN-TCC 分布式事务-LCN 分布式事务-消息队列-定时任务-本地事件表 Zuul网关实战02 Zuul网关实战01 灰度发布落地实战2 灰度发布落地实战1 Gsnova on Heroku build Systemd Debian system initialization manage multi id_rsa ubuntu 64bits cannot run 32bits app REHL power auditing Debug Assembly for ARMv8 on QEMU ARM体系结构--寄存器 Run Debian iso on QEMU ARMv8 QEMU ARM64 guide cross compiler install buildroot install QEMU install python入门--数据结构 python入门--内置数据类型 python入门--类 异常 python入门--条件表达式 方法 python入门--数字 字符串 数组 RTC驱动分析 块设备驱动 TCP UDP socket 触摸屏驱动 USB驱动 LED按键中断 LCD 驱动 驱动信号 根文件系统 实验 内核实验 字符设备驱动程序 绪论 uboot 实验 LCD 实验 系统时钟和UART 中断控制器 Nand Flash控制器 MMU 实验 储存管理器实验 GPIO实验 点亮LED 编译加载驱动 制作烧写内核 dnw替代方法 MINI2440 TQ2440安装配套Linux 使用NFS 制作烧写跟文件系统 grub引导Windows 烧写裸版程序-linux Ubuntu 网络没有 eth0 Linux自动挂载 烧写裸板程序 电路基础 Mac词典 Vim插件 Assembly 综合研究 Assembly 指令总结 Assembly 直接定址表 Assembly 使用BIOS进行键盘输入和磁盘读写 Assembly 外中断 Assembly 端口 Assembly int指令 Assembly 内中断 Assembly 标志寄存器 Assembly 转移指令的原理 Assembly Call和ret指令 Assembly 数据处理两个基本问题 Assembly 灵活定位内存地址 Assembly 包含多个段的程序 Assembly [bx] loop Assembly 第一个程序 Assembly 寄存器 (内存访问) Assembly 寄存器 AWS VPN with EC2 hidden file in picture(linux) Assembly 基础 idea shortcuts 常用快捷键 idea plugin folder install ruby and jekyll

Assembly 灵活定位内存地址

2014年09月22日

###and 和 or指令 1.and指令:逻辑与指令,按位进行与计算

例:

mov al,01100011B
and al,00111011B

执行后al值为:00100011B

通过该指令可将操作对象的相应位设为0,其他位不变

2.or指令:逻辑或指令,按位进行或计算

例:

mov al,01100011B
or	al,00111011B

执行后al值为:01111011B

通过该指令可将操作对象的相应位设为1,其他位不变

###关于ASCII码 ASCII编码方案就是一套规则,约定了用什么样的信息来表示现实对象,比如说,在ASCII编码方案中,用61H表示“a”,62H表示“b”

显卡在处理文本信息的时候,是按照ASCII码的规则进行

###以字符形式给出的数据 汇编源程序中用’….’的方式指明数据是以字符的形式给出的,编译器将把它们自动转化为相对的ASCII码

如:

data segment
	db 'unIX'
	db 'foRK'
data ends

code segment
	mov al,'a'
	mov bl,'b'
code ends

db ‘unIX’ 相当于 “db 75H,6EH,49H,58H”, “u”、“n”、“I”、“X” ASCII码分别是 75H,6EH,49H,58H

###大小写转换问题 |大写|十六进制| 二进制 |小写|十六进制| 二进制 | |———————————————| | A | 41 |01000001| a | 61 |01100001| | B | 42 |01000010| b | 62 |01100010| | C | 43 |01000011| c | 63 |01100011|

可以使用十六进制 20H:

将“A”加上20H 得到 “a”

将“a”减去20H 得到 “A”

推荐使用二进制 and 和 or:

and al,11011111B; 将al中的ASCII码的第5位设为0,变为大写

or al,00100000B; 将al中的ASCII码的第5位设为1,变为小写

###[bx+idata] mov ax,[bx+200]

作用:(AX)=((ds)*16+(bx)+200)

###用[bx+idata]的方式进行数组的处理 C语言:a[i], b[i]

汇编语言:0[bx], 5[bx]

###SI 和DI si和di 是8086CPU中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用

例:

mov bx,0
mov ax,[bx]

mov si,0
mov ax,[si]

###[bx+si]和[bx+di] mov ax,[bx+si]

作用:ax=(ds*16 + bx+si)

也可以写为 mov ax,[bx][si]

###[bx+si+idata]和[bx+di+idata] mov ax,[bx+si+5]

作用:ax=(ds*16+ bx+si+5)

也可以写成:

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

###不同的寻址方式的灵活应用 [idata]用一个常量表示偏移地址,可用于直接定位一个内存单元

[bx] 用一个变量表示偏移地址,用于间接定位

[bx+idata]用一个变量和一个常量表示

[bx+si]两个变量

[bx+si+idata] 两个变量一个常量

###程序中经常需要数据的暂存,怎样做更为合理 有些数据是寄存器中的,也可能是内存中的

一般来说,在需要暂存数据的时候,我们都应该使用栈

###小结

  • 寻址方式 [bx(或si、di)+idata]、[bx+si(或di)]
  • 二重循环问题的处理————push CX pop CX
  • 栈的应用————暂存数据
  • 大小写转换的方法————and or
  • and or指令