文档详情

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

发布:2017-07-23约2.95千字共4页下载文档
文本预览下载声明
第7章 更灵活的定位内存地址的方法7.1 and和or指令例:转换:通过改写第5位的值大写 十六进制 二进制 小写 十六进制 二进制A4101000001a6101100001B4201000010b6201100010C4301000011c6301100011D4401000100d6401100100E4501000101e6501100101F4601000110f6601100110assume cs:code,ds:datadata segmentdb BaSiC//将小写变成大写db iNfOrMaTiOn//将大写变成小写data endscode segmentstart:movax,datamovds,ax//设置DS指向data段mov bx,0mov cx,5s:mov al,[bx]and al//将ASCII码的第5位变成0,变成大写字母mov [bx],alinc bxloop smov bx,5mov cx,11s0:mov al,[bx]or al//将ASCII码的第5位变成1,变成小写字母mov [bx],alinc bxloop s0mov ax,4coohint 21hcode endsend startand:逻辑与mov aland al执行后:al结论:将第几位变成0,第几位数值为0,其余为1or:逻辑或mov aloral执行后:al结论:将第几位变成1,第几位数值为17.5[bx+idata]内存中2000:1000 BE 00 06 00 0000 ......mov ax,2000hAX 2000Hmovds,axDS 2000Hmov bx,1000hBX 1000Hmov ax,[bx]AX 00BEHmovcx,[bx+1]CX 0600H//[bx+1]=1000h+1h=1001haddcx,[bx+2]CX 0606H//[bx+2]=1000h+2h=1002h7.6用[bx+idata]的方式进行数组的处理assume cs:code,ds:datadata segmentdb BaSiC;转换成大写db MinIX;转换成小写data endscode segmentstart:movax,datamovds,axmov bx,0mov cx,5s:mov al,0[bx]and almov 0[bx],almov al,5[bx]//5[bx]等同于[bx+5]or almov 5[bx],alinc bxloop scode endsend start7.7 SI和DISI,DI不能分为两个8位寄存器来使用例:将字符串复制到后面的数据区中assume cs:code,ds:datadata segmentdb welcome to masm!db ................data endsCode segmentStart: movax,dataMovds,axMov si,0Mov di,16Mov cx,8Mov cx,8S: mov ax,0[si]S: mov ax,[si]Mov 16[si],axMov [di],axAdd si,2Add si,2Loop sAdd di,2Loop sMov ax,4c00hInt 21hcode endsend start7.8 [bx+si]和[bx+di]内存中2000:1000 BE 00 06 00 0000 .....mov ax,2000hax=2000Hmovds,axds=2000Hmov bx,1000hbx=1000Hmov si,0si=0000Hmov ax,[bx+si]ax=00BEHinc sisi=0001Hmovcx,[bx+si]cx=0600Hinc sisi=0002Hmovdi,sidi=0002Hadd cx,[bx+di]cx=0606H7.9 [bx+si+idata]和[bx+di+idata]mov ax,[bx+200+si]mov ax,[200+bx+si]mov ax,200[bx][si]mov ax,[bx].200[si]mov ax,[bx][si].200例:内存中2000:1000 BE 00 06 00 6A 22 .....mov ax,2000hax=2000Hmovds,axds=2000Hmov bx,1000hbx=1000Hmov si,0si=0000Hmov
显示全部
相似文档