不同的寻址方式灵活运用(di,si)
2014-07-15 10:33
411 查看
si和di是8086cpu中和必须功能最相近的寄存器,si和di不能给凤城二个8位寄存器来使用。下面3组指令实现了相同的功能。
1:
mov bx,0
mov ax,[bx] ;ax=16*ds+bx
2:
mov si,0
mov ax,[si] ;ax=16*ds+si
3:
mov di,0
mov ax,[di] ;ax=16*ds+di
4:
mov bx,0
mov ax,[bx+123] ;ax=(16*ds)+(bx+123)
5:
mov s1,0
mov ax,[si+123] ;ax=(16*ds)+(si+123)
6:
mov di,0
mov ax,[di+123] ;ax=(16*ds)+(di+123)
用更少的代码实现
不同的寻址方式灵活运用
[bx+si]和[bx+di]
mov ax,[bx+si] ;ax=(16*ds)+(bx+si) ;moc ax,[bx][si]
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
[idata]用常量来表示地址,可以用于直接定位一个内存单元
[bx]用一个变量来表示内存地址,可以间接定位一个内存单元
[bx+idata]用于一个变量和常量表示地址,可以在一个初始地址的基础上用变量间接定位一个内存单元
[bx+si]用于二个变量表示地址
[bx+si+idata]用于二个变量和一个常量表示地址
1:
mov bx,0
mov ax,[bx] ;ax=16*ds+bx
2:
mov si,0
mov ax,[si] ;ax=16*ds+si
3:
mov di,0
mov ax,[di] ;ax=16*ds+di
4:
mov bx,0
mov ax,[bx+123] ;ax=(16*ds)+(bx+123)
5:
mov s1,0
mov ax,[si+123] ;ax=(16*ds)+(si+123)
6:
mov di,0
mov ax,[di+123] ;ax=(16*ds)+(di+123)
;将'welcome to masm!'复制到后面的数据中 assume cs:code,ds:data data segment db 'welcome to masm!' ;16字节 data ends code segment start: mov ax,data mov ds,ax mov si,0 mov di,16 s: mov ax,[si] mov [di],ax add si,2 add di,2 loop s mov ax,4c00H int 21H code ends end start ;16位寄存器最多复制2个字节,一共复制8次
用更少的代码实现
;将'welcome to masm!'复制到后面的数据中 assume cs:code,ds:data data segment db 'welcome to masm!' ;16字节 data ends code segment start: mov ax,data mov ds,ax mov si,0 s: mov ax,0[si] mov 16[si],ax add si,2 loop s mov ax,4c00H int 21H code ends end start
不同的寻址方式灵活运用
[bx+si]和[bx+di]
mov ax,[bx+si] ;ax=(16*ds)+(bx+si) ;moc ax,[bx][si]
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
[idata]用常量来表示地址,可以用于直接定位一个内存单元
[bx]用一个变量来表示内存地址,可以间接定位一个内存单元
[bx+idata]用于一个变量和常量表示地址,可以在一个初始地址的基础上用变量间接定位一个内存单元
[bx+si]用于二个变量表示地址
[bx+si+idata]用于二个变量和一个常量表示地址
;将datags段中每个单词的头字母改为大写字母 assume cs:code,ds:data data segment db '1. file ' ;16字节 db '2. edit ' ; db '3. search ' ; db '4. view ' ; db '5. options ' ; db '6. help ' ; data ends code segment start: mov ax,data mov ds,ax mov si,0 s: mov ax,3[si] and ax,11011111b mov 3[si],ax add si,16 loop s mov ax,4c00H int 21H code ends end start将datasg段每个单词改成大写字母
assume cs:codesg,ds:datasg,ss:stacksg datasg segment db 'ibm ' db 'dec ' db 'doc ' db 'vax ' datasg ends stacksg segment dw 0,0,0,0,0,0,0,0 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 ;外循环压栈 mov si,0 mov cx,3 s: mov al,[bx+si] ;内循环si内存偏移计数,bx外循环偏移量计算 and al,1101111b mov [bx+si],al inc si ;si+ loop s and bx,16 ;bx+16 pop cx ;cx弹出 loop s0 codesg ends end start
相关文章推荐
- 第七章 灵活运用寻址方式(si/di和内嵌套循环)——所有的习题练习
- 汇编语言之不同寻址方式的灵活运用
- [汇编语言]-第七章 不同的寻址方式的灵活应用
- MFC三种不同方式实现图形的保存和重绘---方法二: 运用CMetaFileDC
- MFC三种不同方式实现图形的保存和重绘---方法二: 运用CMetaFileDC
- cocos-html5 Json 灵活 遍历方式 不同方式的缺陷,优点总结
- 8.6寻址方式的综合运用
- 8.6种灵活的寻址方式与其作用
- C#.NET 可以为不同的客户定制不同的登录窗体的设计思路参考【功能代码组件化,可以灵活选配】
- 深入理解计算机系统-之-内存寻址(四)--linux中分段机制的实现方式
- IIS服务中五种身份验证的灵活运用
- java 实现WebService 以及不同的调用方式
- 不同页面之间实现参数传递的几种方式
- ARM汇编语言学习笔记之寻址方式
- yuv420 rgb32等各个不同数据帧大小的计算方式
- toString的不同实现方式
- 指针的灵活运用 4000
- java 实现WebService 以及不同的调用方式
- 汇编语言基础四 —— 操作数的寻址方式
- 汇编的8种寻址方式,以及2个默认段寄存器