[汇编语言]实验:应用更灵活的寻址方式来定位内存地址

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[汇编语言]实验:应用更灵活的寻址方式来定位内存地址相关的知识,希望对你有一定的参考价值。

实验内容:

(1)将datasg段中每个单词的头一个字母改成大写字母。

datasg段中的数据为:

在这里插入图片描述

(2)

将datasg段中每个单词的字母改成大写字母。

datasg段中的数据为:

ibm             
dec             
dos             
vax             

(3)

将datasg段中每个单词的前四个字母改成大写字母

datasg段中的数据为:

在这里插入图片描述

(1)
变量+常量的方式定位内存地址:

代码如下:

assume cs:codesg,ds:datasg

datasg segment
	db '1. file         '
	db '2. edit         '
	db '3. search       '
	db '4. view         ' 
	db '5. options      '
	db '6. help         '
datasg ends

codesg segment
start:	mov ax,datasg
		mov ds,ax
		mov bx,0
		
		mov cx,6
		
	s:	mov al,[bx+3]
		and al,11011111b
		mov [bx+3],al
		add bx,16
		loop s
		
		mov ax,4c00h
		int 21h
codesg ends
end start

(2)

用ds保存cx的值,以达到双层循环的效果。

代码如下:

assume cs:codesg,ds:datasg

datasg segment
	db 'ibm             '
	db 'dec             '
	db 'dos             '
	db 'vax             '
datasg ends

codesg segment
start: 	mov ax,datasg
		mov ds,ax
		mov bx,0
		
		mov cx,4
		
	s0: mov dx,cx
		mov si,0
		mov cx,3
		
		
	s:	mov al,[bx+si]
		and al,11011111b
		mov [bx+si],al
		
		inc si
		
		loop s0
		
		add bx,16
		mov cx,dx
		loop s0
		
		mov ax,4c00h
		int 21h
	
codesg ends
end start	

用内存保存cx

代码如下:

assume cs:codesg,ds:datasg

datasg segment
	db 'ibm             '
	db 'dec             '
	db 'dos             '
	db 'vax             '
	db 0                ;定义一个字,用来存放cx
datasg ends

codesg segment
start: 	mov ax,datasg
		mov ds,ax
		mov bx,0
		
		mov cx,4
		
	s0: 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 s0
		
		add bx,16
		mov cx,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 'dos             '
	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]
		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

(3)
代码如下:

assume ds:datasg,ss:stacksg,cs:codesg

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,datasg
		mov ds,ax
		mov ax,stacksg
		mov ss,ax
		mov sp,16
		
		mov bx,0
		mov cx,4
	s:	push cx
		mov cx,4
		mov si,0
	s0:
		mov al,[bx+si+3]
		and al,11011111b
		mov [bx+si+3],al
		inc si
		loop s0
		
		add bx,16
		pop cx
		loop s
		
		mov ax,4c00h
		int 21h
codesg ends
end start
		
		

以上是关于[汇编语言]实验:应用更灵活的寻址方式来定位内存地址的主要内容,如果未能解决你的问题,请参考以下文章

[汇编]《汇编语言》第7章 更灵活的定位内存地址的方法

汇编实验9

汇编实验九

8086汇编语言学习 8086寻址方式

实验九

实验九