[汇编语言]-第七章 更灵活的定位内存地址的方法
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