前言:
此时朋友们对“汇编语言中dup是什么意思”都比较着重,姐妹们都需要知道一些“汇编语言中dup是什么意思”的相关文章。那么小编也在网络上汇集了一些对于“汇编语言中dup是什么意思””的相关知识,希望你们能喜欢,姐妹们快快来学习一下吧![bx+idata]
mov ax,[bx+200]相当于mov ax,200[bx],也相当于mov ax,[bx].200。
例如:假定内存2000:1000 BE 00 06 00 00 00 ...
下列程序执行后,ax、bx、cx中的内容为多少?
mov ax,[bx]:(ax)=00BEH
mov cx,[bx+1]:(cx)=0600H
add cx,[bx+2]:(cx)=0600H + 0060H = 0606H
si和di寄存器
si和di寄存器的功能与bx寄存器相近,都可以用来表示偏移地址。
目标:将字符串复制到后面的内存区域。
assume cs:code,ds:datadata segment db 'blackcat' db '........'data ends code segment start:mov ax,data mov ds,ax mov si,0 mov cx,8 s: mov al,[si] mov [si].8,al inc si loop s mov ax,4c00h int 21h code ends end start[bx+si+idata]
例如:假定内存2000:1000 BE 00 06 00 6A 22 ...
mov ax,[bx+2+si]:(ax)=0006H
mov cx,[bx+2+si]:(cx)=6A00H
mov bx,[bx+2+di]:(bx)=226AH
单词首字母转大写
问题:将data段数单词的首字母变为大写字母。
6个字符串,每个字符串长度为16个字节,不足16个字节用空格补位,使得偏移地址范围相同。
也可以将其看做6*16的二维数组,每个单词的首字母下标为3。
这也说明,二维数组逻辑结构上通过行和列索引数据,实际上依然是一维的存储结构。
单词每个字母转大写
枚举行,再枚举每一列,需要双重循环。
然而,我们只有一个cx计数器,那么再内层循环中对cx进行重新赋值,就会更改其外部的cx。比如用dx保存外层cx,内层循环结束,再恢复cx外层的数值。
这样实现有一个问题,寄存器数量是有限的,因此,进一步地,可以考虑使用一个内存单元保存cx临时值,就没有数量限制,这种操作方式比较复杂,而且用内存单元装cx数据,程序可读性也很差。
比较常用的方式是利用栈进行临时值存储,存储cx时push cx,恢复cx时pop cx。
assume cs:code,ds:data,ss:stackdata segment db 'cat ' db 'dog ' db 'pig ' db 'aaa 'data ends stack segment dw 8 dup(0)stack endscode segment start:mov ax,stack mov ss,ax mov sp,10h mov ax,data mov ds,ax mov bx,0 mov cx,4 s: push cx mov si,0 mov cx,3 s2: mov al,[bx+si] and al,11011111B mov [bx+si],al inc si loop s2 add bx,16 pop cx loop s mov ax,4c00h int 21h code ends end start
标签: #汇编语言中dup是什么意思