汇编语言(王爽)第七章&实验六 |
您所在的位置:网站首页 › 汇编程序小写字母转大写字母不影响别的 › 汇编语言(王爽)第七章&实验六 |
汇编语言第七章&实验六
7.1 and和or指令 and指令,逻辑与指令,按位进行与运算 mov al,01100011B and al,00111011B执行后al=00100011B,通过该指令可将操作对象的相应位设为0,其他位不变 or指令,逻辑或指令,按位进行或运算 mov al,01100011B or al,00111011B执行后al=01111011B ,通过该指令可将操作对象的相应位设为1,其他位不变 7.2 关于ASCII码 我们把信息存储在计算机中,就要对其进行编码,转化为二进制信息,而计算机将存储的信息显示给我们看,就要进行解码,ASCII码就是一种编码方案 在编辑文本时按下a键,这个按键的信息传入计算机,计算机编码后转化为61H存储在内存中,文本编辑软件从内存中取出61H,将其送到显卡上的显存中,工作在文本模式下的显卡,用ASCII码的规则解释显存中的内容,61H被当作字符a,显卡驱动显示器将字符a的图像画在屏幕上 7.3 以字符形式给出的数据 在汇编程序中,用’……'的方式指明数据是以字符的形式给出的,编译器将它们转化为对应的ASCII码 assume cs:code,ds:date data segment db 'unIX' db 'foRK' data ends code segment start: mov al,'a' mov bl,'b' mov ax,4c00h int 21h code ends end startdb ‘unIX’相当于’db 75H,6EH,49H,58H’ mov al,'a’相当于mov al,61H 7.4 大小写转换的问题 将datasg中的第一个字符串转化为大写,第二个字符串转化为小写 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awc0M48Y-1583139213436)(C:\Users\田明浩\AppData\Roaming\Typora\typora-user-images\image-20200302130808763.png)] 第一种方法,观察到小写字母的ASCII码值比对应的大写字母ASCII码值大20H,但是由于字符串中既有大写又有小写,需要进行判断是否为大写或者小写,但目前还没学过使用汇编的判断语句 第二种方法,从ASCII码的二进制形式来看,除第5位(从0开始计数)外,其他各位都一样,所以对于一个字母,不管大写小写,将第5位置置零即可 assume cs:codesg,ds:datasg datasg segment db 'BaSiC' db 'iNdOrMaTiOn' datasg ends codesg sgement start: mov ax,datasg mov ds,ax mov bx,0 mov cx,0 s:mov al,[bx] and al,11011111B mov [bx],al inc bx loop s mov bx,5 mov cx,11 s0:mov al,[bx] or al,00100000B mov [bx],al inc bx loop s0 mov ax,4c00h int 21h codesg ends end start7.5 [bx+idata] 可以用[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata 以下指令等价 mov ax,[bx+200] mov ax.[200+bx] mov ax,200[bx] mov ax,[bx].2007.6 用[bx+idata]的方式进行数组的处理 在codesg中填写代码,将datasg中定义的第一个字符串转化为大写,第二个字符串转化为小写 原来的方法需要两个循环,但在同一个循环里也可以完成 assume cs:code,ds:datasg datasg segment db 'BaSiC' db 'MinIX' datasg ends codesg segment start: mov ax,datasg mov ds,ax mov bx,0 mov cx,5 s:mov al,[bx] and al,11011111B mov [bx],al mov al,[5+bx] or al,00100000B mov [5+bx],al inc bx loop s mov ax,4c00H int 21H codesg ends end比较c语言和汇编语言 C:a[i],b[i] 汇编:0[bx],5[bx] 7.7 SI和DI si和di是8086CPU中和bx功能相近的寄存器,si和di不能分成两个8位寄存器来使用 下面3组指令功能相同 mov bx,0 mov ax,[bx] mov si,0 mov ax,[si] mov di,0 mov ax,[di]用si和di实现将字符串’welcome to masm!'复制到它后面的数据区中 assume cs:codesg,ds:datasg datasg segment db 'welcome to masm!' db '................' datasg ends codesg sgement start: mov ax,datasg mov ds,ax mov si,0 mov cx,8 s:mov ax,0[si] mov 16[si],ax add si,2 loops mov ax,4c00h int 21h codesg ends end start7.8 [bx+si]和[bx_di] [bx+di]即偏移地址为(bx)+(si) 以下指令等价 mov ax,[bx+si] mov ax,[bx][si]7,9 [bx+si+idata]和[bx+di+idata] [bx+si+idata]即(bx)+(si)+idata 常用格式 mov ax,[bx+si+200] mov ax,[bx+200+si] mov ax,[200+bx+si] mov ax,200[bx][si] mov ax,[bx].200[si] mov ax,[bx][si].2007.10 不同寻址方式的灵活应用 将datasg段中每个单词的头一个字母改为大写字母 assume cs:codesg,ds:datasg datasg segment db '1. file ' ;每个字符串长度为16个字节,因为连续存放 db '2. edit ' ;加空格保证两个字符串不在同一个段中 db '3. search ' db '4 .view ' db '5. options ' db '6. help ' datasg ends codesg segment start: mov ax,datasg mov ds,ax mov bx,0 mov cx,6 s:mov al,[bx+3] and al,11011111B mov [bx+3],al add bx,16 loops mov ax,4c00h int 21h codesg ends end start将datasg段中每个单词改为大写字母,这样就要用到二重循环,但是两个循环都要用到cx,所以需要暂存外层循环cx的值,可以使用寄存器暂存,但是一般来说,在需要暂存数据的时候,我们都应该使用栈 assume cs:codesg,ds:datasg,ss:stacksg datasg segment db 'ibm ' db 'dec ' db 'dos ' db 'vax ' datasg ends stacksg segment dw 0,0,0,0,0,0,0,0 ;定义一共栈段,容量为16个字节 stacksg ends codesg segment start: mov ax,stacksg mov ss,ax mov sp,16 mov ax,datasg mov ds,ax mov bx,0 mov cx,4 s0:push cx ;外层循环的cx压栈 mov si,0 mov cx,3 s:mov al,[bx+si] and al,11011111B mov [bx+si],al inc si loops add bx,16 pop cx loop s0 mov ax,4c00h int 21h codesg ends end start 实验六编程,将datasg段中每个单词的前4个字母改为大写字母 assume cs:codesg,ss:stacksg,ds:datasg stacksg segment dw 0,0,0,0,0,0,0,0 stacksg ends datasg segment db '1. display ' db '2. brows ' db '3. replace ' db '4. modify ' datasg ends codesg segment start: mov ax,stacksg mov ss,ax mov sp,16 mov ax,datasg mov ds,ax mov bx,0 mov cx,4 s0:push cx mov si,3 mov cx,4 s0:push cx mov si,3 mov cx,4 s:mov al,[bx+si] and al,11011111B mov [bx+si],al inc si loop s pop cx add bx,16 loop s0 mov ax,4c00h int 21h codesg ends end start |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |