[汇编语言]-第七章 更灵活的定位内存地址的方法

1- or, and 指令

  mov al,01100011B

  and  al,00111011B

  执行后al=00100011B

  mov al,01100011B

  or  al,00111011B

 执行后al=01111011B

2- 关于ASCII码

  世界上有很多编码方案,有一种方案叫做ASCII编码.所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象.比如在ASCII编码方案中,用61H表示"a", 62H表示"b", 一种规则需要人们遵守才有意义.

3- 一个文本编辑过程中.就包含着按照ASCII编码规则进行的编码和解码.

  在文本编辑器中,我们按下a键,这个按键的信息被送入计算机,计算机用ASCII码的规则对其进行编码.将其转化为61H存储在内存的指定空间中.文本编辑器从内存中取出61H,将其送入到显卡上的显存中,工作在文本模式下的显卡,用ASCII码的编码规则解释显存中的内容.61H被当做字符'a', 显卡驱动显示器, 将字符"a"的图像画在屏幕上.

4- 如果想要在显示器上显示a, 就要给显卡提供"a"的ASCII码, 61H. 如何提供, 当然是写入显存中.

5- 以字符形式给出的数据

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

 1 assume ds:data,cs:code
 2 data segment
 3     db 'unIX'
 4     db 'forRK'
 5 data ends
 6 code segment
 7 start:     mov    al,'a'
 8         mov    bl,'b'
 9         
10         mov ax,4c00h
11         int 21h
12 code ends
13 end start

 

 //我们可以看出data段中每个数据所对应的ACSII字符

6- 大小写转换的问题

 

 1 comment *
 2 将datasg中的第一个字符串转化为大写,第二个字符串转化为小写
 3 大写 十六进制 二进制      小写  十六进制 二进制
 4 A        41    01000001        a        61    01100001
 5 B        42    01000010        b        62    01100010
 6 C        43    01000011        c        63    01100011
 7 D        44    01000100        d        64    01100100
 8 E        45    01000101        e        65    01100101
 9 F        46    01000110        f        66    01100110
10 * comment
11 
12 assume cs:codesg,ds:datasg
13 datasg segment
14     db 'BaSiC'
15     db 'iNFOrMaTiOn'
16 datasg ends
17 codesg segment
18 start:    mov ax,datasg
19         mov ds,ax
20         
21         mov bx,0
22         mov cx,5
23     s:  mov al,[bx]
24         and al,11011111B
25         mov [bx],al
26         inc bx
27         loop s
28         
29         mov bx,5
30         mov cx,11
31     s0:    mov al,[bx]
32         or    al,00100000B
33         mov [bx],al
34         inc bx
35         loop s0
36         
37         mov ax,4c00h
38         int 21h
39 codesg ends
40 end start

 

执行后:

 7- [bx+idata] 表示一个内存单元, 他的偏移地址为(bx)+idata (bx中得数据加上idata)

  mov ax,[bx+200]

  (ax) = ((ds)*16+(bx)+200)

  该指令可以写成如下格式(常用):

  mov ax,[200+bx]

  mov ax,200[bx]

  mov ax,[bx].200

  例子:

  2000:1000 BE 00 06 00 00 ......

  mov ax,2000H

  mov ds,ax

  mov bx,1000

  mov ax,[bx]    //ax 00BEH

  mov cx,[bx + 1]  //cx 0600H

  add cx,[bx + 2]  //(cx) = 0600 + 0006 = 0606H

 

posted @ 2014-02-25 10:45  galoishelley  阅读(486)  评论(0编辑  收藏  举报