第7章 更灵活的定位内存地址的方法_第1页
第7章 更灵活的定位内存地址的方法_第2页
第7章 更灵活的定位内存地址的方法_第3页
第7章 更灵活的定位内存地址的方法_第4页
第7章 更灵活的定位内存地址的方法_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 更灵活的定位内存地址的方法7.1 and 和 or 指令n(1) and 指令:逻辑与指令,按位进行与运算。n例: mov al,01100011Bn and al,00111011Bn执行 (al)=00100011Bn(2) or指令:逻辑或指令,按位进行或运算。n例: mov al,01100011Bn or al,00111011Bn执行 (al)=01111011B7.2 关于ASCII码n美国标准信息码。n将一些字符转换成二进制数,存入到计算机。n如:a的ASCII码为61H。7.3 以字符形式给出的数据n在汇编程序中,用的方式指明数据是以字符的形式给出。编译器将把他们转化

2、为对应的ASCII码。程序7.1n assume ds:datan data segmentn db unIXn db foRKn data endsn code segmentn start: mov al,an mov bl,bn mov ax,4c00hn int 21hn code endsn上面的源程序中:n db unIX 相当于 db 75H,6EH,49H,58Hnn mov al,a 相当于 mov al,61Hn7.4 大小写转换的问题n问题:在codesg中编写代码,将datasg中的第一个字符串转化为大写,第二个字符串转化为小写。n assume cs:codesg,d

3、s:datasgn datasg segmentn db BaSiC;n db iNfOrMaTionn satasg endsn codesg segmentn start: n codesg endsn end start大大写写十六进十六进制制二进制二进制小小写写十六进十六进制制二进制二进制A410100,0001 a610110,0001B420100,0010 b620110,0010C430100,0011 c630110,0011D440100,0100 d640110,0100E450100,0101 e650110,0101F460100,0110 f660110,0110同

4、一个字母的小写字母与大写字母差为20H。同一个字母的小写字母与大写字母的ASCII码的第5位二进制数差1.n用什么方法将一个数据中的某一位置0或置1?n0与上任何数,结果为0n1或上任何数,结果为1n将某一个数的第5位置0,与上1101,1111n将某一个数的第5位置1,或上0010,0000nassume cs:codesg,ds:datasgn datasg segmentn db BaSiC;n db iNfOrMaTionn satasg endsn codesg segmentn start: mov ax,datasgn mov ds,axn mov cx,5n s:mov al,

5、bxn and al,11011111Bn mov bx,aln inc bxn loop an mov cx,5n s0:mov al,bxn or al,00100000Bn mov bx,aln inc bxn loop an codesg endsn end start7.5 bx+idatan用BX的方法指明一个内存单元。n用BX+idata的方法可以更灵活的指明一个内存单元。n它的偏移地址为 (bx)+idatan指令 mov ax,bx+200n内存单元的段地址在DS中,偏移地址为(bx)+200n常见的指令格式:n mov ax,200+bxn mov ax,200bxn mo

6、v ax,bx.200问题 7.1n假设用Debug查看到:n2000:1000 BE 00 06 00 00 00n执行下面的程序后,ax,bx,cx中的内容。n mov ax,2000Hn mov ds,axn mov bx,1000Hn mov ax,bxn mov cx,bx+1n add cx,bx+27.6 用bx+idata的方式进行数组的处理nassume cs:codesg,ds:datasgn datasg segmentn db BaSiC;n db MinIXn satasg endsn codesg segmentn start: mov ax,datasgn mov

7、 ds,axn mov cx,5n s:mov al,bxn and al,11011111Bn mov bx,aln inc bxn loop sn mov cx,5n s0:mov al,bxn or al,00100000Bn mov bx,aln inc bxn loop an codesg endsn end startnassume cs:codesg,ds:datasgn datasg segmentn db BaSiC;n db MinIXn satasg endsn codesg segmentn start: mov ax,datasgn mov ds,axn mov cx

8、,5n s:mov al,bxn and al,11011111Bn mov bx,aln mov al,5+bx n or al,00100000Bn mov 5+bx,aln inc bxn loop sn codesg endsn end startnchar a5=“BaSiC”;n char b5=“MinIX”;n main()n int I;n i=0;n do ai=ai&0 xDF;n bi=bi|0 x20;n i+;while(i5);n在汇编语言中字符串的定位nmov al,bx mov al,0bxn mov al,5+bx mov al,5bxn在C语言中字

9、符串的定位n ai,bi7.7 SI和DIn si 和di 是与BX功能相近的寄存器,不能拆成两个8位寄存。比较下面的三组指令:n 1) mov bx,0n mov ax,bxn 2) mov si,0n mov ax,sin 3) mov di,0n mov ax,din比较下面的三组指令:n 1) mov bx,0n mov ax,bx+123n 2) mov si,0n mov ax,si+123n 3) mov di,0n mov ax,di+123问题 7.2n用寄存器SI和DI实现将字符串welcome to masm! 复制到它后面的数据区中。n assume cs: codes

10、g, ds:datasgn datasg segmentn db welcome to masm!n db .n datasg endsn思考: 要复制的数据在 datasg:0, 长度为 16字节, 复制到 datasg:16。n用ds:si指向源数据,用ds:di指向目的空间。n codesg segmentn start: mov ax,datasgn mov ds,axn mov si,0n mov di,16n mov cx,8n s: mov ax,sin mov di,axn add si,2n add di,2n loop sn mov ax,4c00hn int 21n co

11、desg endsn end start改进:用bx(si或di)+idata的方式ncodesg segmentn start: mov ax,datasgn mov ds,axn mov si,0n mov cx,8n s: mov ax,0sin mov 16si,axn add si,2n loop sn mov ax,4c00hn int 21n codesg endsn end start7.8 bx+si和bx+din 以bx+si为例,表示一个内存单元的偏移地址为(bx)+(si), n如:指令 mov ax, bx+si n 也可以写 mov ax,bxsin 问题 7.4n

12、用debug查看内存,结果如下:n2000:1000 BE 00 06 00 00 00 n 写出下面的程序执行后,ax,bx,cx中的内容。n mov ax,2000hn mov ds,axn mov bx,1000hn mov si,0n mov ax,bx+sin inc sin mov cx,bx+sin inc sin mov di,sin add cx,bx+di 7.9 bx+si+idata和bx+di+idatan以bx+si+idata为例进行讲解。nbx+si+idata表示一个内存单元,它的偏移地址是(bx)+(si)+idata n 指令 mov ax, bx+si+

13、idata 它的常用格式:n mov ax, bx+200+si n mov ax, 200+bx+si n mov ax, 200bxsi n mov ax, bx .200sin mov ax, bx si .200问题 7.5n用debug查看内存,结果如下:n2000:1000 BE 00 06 00 6A 22 n 写出下面的程序执行后,ax,bx,cx中的内容。n mov ax,2000hn mov ds,axn mov bx,1000hn mov si,0n mov ax,bx+2+sin inc sin mov cx,bx+2+sin inc sin mov di,sin mo

14、v bx,bx+2+di 7.10 不同的寻址方式的灵活应用n前面用到的几种定位内存地址的方法(可称为寻址方式)nidata 用一个常量表示地址nbx 用一个变量表示地址nbx+idata 用一个变量和一个常量表示地址nbx+si 用二个变量表示地址nbx+si+idata 用二个变量和一个常量表示地址问题 7.6n编程,将datasg段中每个单词的头一个字母改为大写字母。n assume cs:codesg,ds:datasgn datasg segmentn db 1. file ;16个字节n db 2. edit n db 3. search n db 4. view n db 5.

15、options n db 6. help n datasg endsn codesg segmentn start:n codesg endsn end start0123456789ABCD EF00H 1.file10H 2.edit20H 3.search30H 4.view40H 5.options50H 6.helpRCn处理过程:n R=第一行的地址n mov cx,6n s: 改变R行,3列的字母为大写n R=下一行的地址n loop sn用bx作变量,定位每行的起始地址,用3定位要修改的列,用bx+idata的方式寻址。程序如下:n mov ax,datasgn mov ds,axn mov bx,0n mov cx,6n s:mov al,bx+3n and al,00100000bn mov bx+3,aln add bx,16n loop s问题 7.7n编程: 将datasg段中每个词改为大写字母。n assume cs:codesg,ds:datasgn datasg segmentn db ibm ;16个字节n db dec n db dos n db vax n datasg endsn 处理过程:nR=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论