Advertisement

王爽《汇编语言》学习笔记--第七章

阅读量:

更灵活的定位内存地址的方法

7.1 AND和OR指令

AND运算指令:完成按位与运算。该指令可使操作对象的相应位被设置为0.

如:

将AL的第3位设为0:AND AL,11110111B

将AL的第0位设为0:AND AL,11111110B

(2) OR 指令:执行按位逻辑 OR 运算。该指令可使操作对象的相应位被设置为 1.

如:

将AL的第3位设为0:AND AL,00001000B

将AL的第0位设为0:AND AL,00000001B

7.2关于ASCII码

7.3 以字符形式给出的数据

实例:

复制代码
    assume 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

DS=0B8E,所以程序从0B9E段开始,中间的部分为PSP段。

7.4 大小写转换的问题

复制代码
    assume cs:codesg,ds:datasg
    
    datasg segment
    	db 'BaSiC'
    	db 'iNfOrMaTiOn'
    datasg ends
    
    codesg segment
    	start: mov ax,datasg
    		   
    		   mov ds,ax   ;ds指向datasg段
    		   
    		   mov bx,0    ;ds:bx指向'BaSiC'的第一个字母
    		   
    		   mov cx,5    ;循环次数为5,'BaSiC'有5个字母
    		   
    		 s:mov al,[bx] ;将ASCII码从ds:bx所指向的单元中取出
    		  
    		   and al,11011111b ;将al中的ASCII码的第五位变为0,即变为大写字母
    		   
    		   mov [bx],al ;将转变后的ASCII码写会原单元
    		   
    		   inc bx    ;(bx)+1,ds:bx指向下一个字母
    		   
    		   loop s 
    		   
    		   mov bx,5  ;将(bx)设为5,ds:bx指向'iNfOrMaTiOn'的第一个字母
    		   
    		   mov cx,11 ;设置循环次数11,因为'iNfOrMaTiOn'有11个字母
    		   
    		s0:mov al,[bx]
    		   
    		   or al,00100000b ;将al中ASCII码的第五位设为1,变为小写字母
    		   
    		   mov [bx],al
    		   
    		   inc bx
    		   loop s0
    		   
    		   mov ax,4c00h
    		   int 21h
    		   
    codesg ends
    end start

7.5 [bx+idata]

7.6 用[bx+idata]的方式进行数组的处理

复制代码
    assume cs:codesg,ds:datasg
    
    datasg segment
    	db 'BaSiC'
    	db 'iNfOrMaTiOn'
    datasg ends
    
    codesg segment
    	start: mov ax,datasg
    		   
    		   mov ds,ax   ;ds指向datasg段
    		   
    		   mov bx,0    ;ds:bx指向'BaSiC'的第一个字母
    		   
    		   mov cx,5    ;循环次数为5,'BaSiC'有5个字母
    		   
    		 s:mov al,[bx] ;将ASCII码从ds:bx所指向的单元中取出
    		  
    		   and al,11011111b ;将al中的ASCII码的第五位变为0,即变为大写字母
    		   
    		   mov [bx],al ;将转变后的ASCII码写会原单元
    		   
    		   mov al,[5+bx]  ;定位第二个字符串
    		   
    		   or al,00100000b
    		   
    		   mov [5+bx],al
    		   
    		   inc bx
    		   
    		   loop s 
    		   		   
    		   mov ax,4c00h
    		   int 21h
    		   
    codesg ends
    end start

7.7 SI和DI

SI 和 DI 是 8086 CPU 中与 BX 功能类似的功能型寄存器,在实际应用中 SI 和 DI 无法被分割为两个单独的 8 位寄存器来进行操作。

7.8 [bx+si]、[bx+di]

7.9 [bx+si+idata]、[bx+di+idata]

这两种为更灵活的寻址方式

7.10 不同寻址方式的灵活运用

全部评论 (0)

还没有任何评论哟~