当前位置:软件学习 > 其它软件 >>

X86汇编学习 ----- 三

 

;还是将data段中第一个字符串转化成大写,第二个字符串转化成小写 

;这个程序算法和上一个一样,只是数据长度一样, 

;就是因为长度一样,所以可以简化程序,减少一个循环 

;2011-9-24        YoungWei 

 

;利用[bx+idata]形式处理数据(将数据作为数组处理其长度为idata) 

 

assume cs:code,ds:data 

 

data segment 

    db 'BasiC' 

    db 'MinIX' 

data ends 

 

code segment 

    start:  mov ax,data 

            mov ds,ax    ;上两行程序将data段和数据段关联起来 

             

            mov bx,0      ;利用bx索引每个字符串的元素 

            mov cx,5       ;由于每个字符串长度为5,故而要进行5次处理(通过循环) 

             

        S:  mov al,ds:[bx]    ;将第一个字符串的第bx个元素放到al中 

            and al,11011111B   ;将al中的元素转化成大写 

            mov ds:[bx],al     ;将al中的元素放回内存中 

             

            mov al,ds:[bx+5]  ;处理第二个字符串 

            or  al,00100000B 

            mov ds:[bx+5],al 

             

            inc bx 

            loop S 

              

            mov ax,4c00h 

            int 21h 

code ends 

end start 

 

这次程序还是通过Debug调试

下面插入两张图片来说明结果(图上已有说明)

\\

 

 

这个程序处理的数据是两个长度一样的字符串,那么三个呢?道理也一样。所以当数据比较特殊时我们可以特殊考虑思考问题的方式从而可以适当降低程序的时间和空间的复杂度。

然后这个程序中

 

mov al,ds:[bx+5] 

 

 

 

 

mov al,[bx+5]和mov al,5[bx]一样 

 

在汇编中ds:[bx+5]是指数据段偏移bx+5个单元中的数据,但是入只写[bx+5]就是默认数据段的偏移[bx+5]处的单元内容。由于在此程序中作为数据段只有一个段,所以可以放心的省略。但是如何作为数据段的段很多则要好好思考在做决定。至于5[bx]就不用说什么了,语言特性。就如C语言中

定义两个字符串char a[5]="BasiC"和b[5]="MinIX",那么[bx]相当于a数组的首地址处内容,与b数组对应的则是5[bx]

 

作者:VI_Young

补充:软件开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,