更灵活的定位内存地址
and ;按位与
or ;按位或
以字符形式给出数据
db 'unix' = db 75h,6eh,49h,58h
大小写转换:第5位置0,变大写,第5位置1,变小写
用[bx+idata]进行数组处理
assume cs:codesg,ds:datasg
datasg segment
db 'BsSic'
db 'MinIX'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s: mov al,0[bx]
and al,11011111b
mov 0[bx],al
mov al,5[bx]
or al,00100000b
mov 5[bx],al
inc bx
loops
codesg ends
end start
a[i] | b[i] |
---|---|
0[bx] | 5[bx] |
SI DI
si di类似bx,但不可以分为高8位、低8位
!!![bx+si] [bx+di]
!!!二元数组
bx | si | di |
---|---|---|
行下标 | 列下标 | 列下标 |
常写为:mov ax [bx][si]
!!![bx+si+idata]
!!三维数组
mov ax,[bx+si+idata]
mov ax,idata[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
嵌套循环与二维数组
assume cs:codesg,ds:datasg
datasg segment
db 'ibm '
db 'dec '
db 'doc '
db 'vax '
;用内存暂存循环变量
;dw 0
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0: mov dx,cx;mov ds:[40h],cx
mov si,0
mov cx,3
s: mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s
add bx,16
mov cx,dx;mov cd,ds:[40h]
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
使用栈暂存循环变量:
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,10h
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]
and al,11011111b
mov [bx+si],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start