(十四)[bx + idata]的方式进行数组的处理--汇编笔记

汇编语言

Posted by YiMiTuMi on March 24, 2020

[bx + idata] (idata = 常量)

可以用[bx]来指明一个内存单元。

也可以用[bx + idata]表示一个内存单元,它的偏移地址为bx + idata

mov ax, [bx + 200]

含义:将一个内存单元的内容送入ax,这个内存单元的长度为2个字节(字单元),存放一个字,偏移地址为bx中的数值加上200,段地址在ds中。

ax = ds * 16 + bx + 200	//地址计算

还有如下格式:

mov ax, 200[bx]

mov ax, [bx].200

例:

2000:1000 BE 00 06 00 00 00

写出ax、bx、cx的内容

mov ax, 2000H

mov ds, ax

mov bx, 1000H

mov ax, [bx]     //ax 00BEH

mov cx, [bx + 1] //cx 0600H
 
add cx, [bx + 2] //cx 0606H bx 1002H

解释cx:

2000:1000 BE

2000:1001 00

2000:1002 06

2000:1003 00

因为cx是16位reg,占2字节,所以2000:1001和2000:1002的内容给cx

(cx)= 0600H

2000:1002 高位, 2000:1001 底位

指到位置的地址为低位还要向后加上他的高位(小端,大端反过来)。

用[bx + idata]的方式进行数组的处理

将字符串中第一个字符串转化为大写,第二个转化为小写。(用数组方式处理)

assume cs:codesg, ds:datasg

datasg segment

	db 'BaSiC'
	db 'MinIX'

datasg ends

codesg segment

	start:  mov ax, datasg
			mov ds, ax
			
			mov bx, 0
			mov cx, 5
			
		s:  mov al, ds:[bx]
			and al, 11011111H
			mov ds:[bx], al
			
			mov al, [bx + 5]   //第2个字符串开始
			or al, 00100000H
			mov [bx + 5], al
			inc bx
			loop s

			mov ax, 4100H
			int 21H

codesg ends

end statr 

合欢花 – 完美爱情、陪伴、两情相悦