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
补充:软件开发 , 其他 ,