汇编--更灵活的定位内存地址

更灵活的定位内存地址

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]

!!!二元数组

bxsidi
行下标列下标列下标

常写为: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值