========================================
更灵活的定位内存地址的方法和相关编程方法
========================================
and:将相应位设为1,其它位不变
or:将相应位设为0,其它位不变
-----------------------------------
用R命令分析下列程序data段的地址:
assume ds:data
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 start
-r:ds=0b2d
则,程序从0b3dh段开始(别忘了psp前缀占了256个字节=100h,段地址的话就是10h)
data段是程序中的第一个段,它就在程序的起始处,所以它的段地址为0b3dh
----------------------------------------
----------------------------------------
[bx+idata]:
-----------
(ax)=((ds)*16+(bx)+200)
mov ax,[bx+200]
mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200
-------------------------
比较c和汇编语言定位字符串中字符的方式:
c: a[i],b[i]
汇编: 0[bx],5[bx]
[bx+idata]为高级语言实现数组提供了便利机制
=======================================
SI和DI是8086cpu中和bx功能相近的寄存器
但它们不能够分成两个8位寄存器
=======================================
实验六(2)
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,3
mov cx,4
s:push cx
mov si,0
mov cx,4
s0:mov al,[bx][si]
and al,11011111b
mov [bx][si],al
inc si
loop s0
add bx,16
pop cx
loop s
mov ax,4c00h
int 21h
codesg ends
end start
--------------------------------------
大小写转换的方法
二重循环
二重循环中栈的应用
=======================================
=======================================