【笔记】【汇编语言】第7章 更灵活地定位内存的方法

7.1 and 和 or 指令
  (1) and 指令:逻辑与指令,按位进行与运算。
  示例:
  mov al,01100011B
  and al,00111011B
  执行结果:(al)=00100011B
 
  (2) or 指令:逻辑或指令,按位进行或运算。
  示例:
  mov al,01100011B
  or al,00111011B
  执行结果:(al)=01111011B
 
7.2 关于ASCII码
  简单的说,所谓编码方案,就是一套规则,它约定了在计算机中,用什么样的信息来表示现实对象。ASCII就是一种编码方案。
 
7.3 以字符形式给出的数据
  我们可以在汇编程序中,用'......'的形式指明数据是以字符的形式给出的,编译器将把它们转化为相对应ASCII码。
 
示例程序:
assume cs:code,ds:data
data segment
  db 'unIX'
  db 'foRK'
data ends

code segment
  start:mov al,'a'
        mov bl,'b'
        mov ax,4c00h
        int 21h
code ends

end start
 
  注:程序中,“db”表示定义字节型数据,“db 'unIX'”表示“db 75H,6EH,49H,58H”
 
7.4 大小写转换问题
  Tips:“A”的十六进制编码为“41H”,二进制编码为“01000001B”,“a”的十六进制编码为“61H”,二进制编码为“01100001B”,所有英文字母的二进制编码中,从左数第三位为“0”的,是大写字母,为“1”的,是小写字母,可利用and或or的指令对字母进行大小写转换。
 
7.5 [bx+idata]
  [bx+idata]也可以写成idata[bx]或者[bx].idata,表示((ds)*16+(bx)+idata)
 
7.6 用[bx+idata]的方式进行数组的处理

7.7 SI和DI
  SI和DI是8086CPU中和BX功能相近的寄存器,SI和DI不能够分成两个8位的寄存器来使用。

7.8 [bx+si]和[bx+di]
  也可以写为:[bx][si]和[bx][di]
  [bx+si]=((ds)*16+(bx)+(si))
  [bx+di]=((ds)*16+(bx)+(di))
 
7.9 [bx+si+idata]和[bx+di+idata]

7.10 不同的寻址方式的灵活应用
  (1) [idata]用一个常量来表示地址,可用于直接定位一个内存单元
  (2) [bx]用一个变量来表示内存地址,可用于间接定位一个内存单元
  (3) [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
  (4) [bx+si]用两个变量表示地址
  (5) [bx+si+idata]用两个变量和一个常量表示地址
 
  注:一般来说,在需要暂存数据的时候,我们都应该使用栈。
 
实验6 实践课程中的程序
  略

原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_7.html