文档介绍:第四章数据传送程序
本章主要内容:
* 汇编语言数据传送指令格式,功能和用法;
* 结合数据传送程序设计的实例介绍各种寻
址方式的具体用法;
* 介绍堆栈的基本用法
* 数据的输入,输出基本方法
数据的传送
MOV指令(传送字节或字)
格式:MOV 目的操作数,源操作数
通用寄存器,存储器,段寄存器,(CS除外),不能为立即数。
通用寄存器,段寄存器,存储器或立即操作数
通用寄存器,段寄存器。存储器或立即操作数
MOV指令所能完成的功能:
注意:当源操作数是立即操作数时,目的操作数
不能是段寄存器,目的操作数和源操作数
不能同时为存储器。
注意:
作为目的操作数。
。
例如:
MOV AX, BX
MOV DI, BX
MOV AL, DH
MOV DS, AX
数据的传送
MOV指令(传送字节或字)
格式:MOV 目的操作数,源操作数
通用寄存器,段寄存器。存储器或立即操作数
MOV指令所能完成的功能:
MOV AX,BX
,BX,CX,DX,
BP,SP,SI,DI赋值。
例:MOV AH,02H
MOV SI ,0
MOV CX ,5
MOV AH , 4CH
数据的传送
。
例: MOV AL,DATA1
MOV SI,[BX]
MOV AX,S2[DI]
MOV [BX][SI], AX
MOV AX,[BX+SI+4]
例: MOV DATA1,34H
MOV BYTE PTR[SI],00H
各种寻址方式编制数据块传送程序
将以SS1为起始地址的30个字符依次传送到同数
据段的以SS2为起始地址的一块内存区域中。
方法一:数据块是用DB定义的一个字符串。
DATA SEGMENT
SS1 DB '1234567890ABCDEFGHIJKLMNOPQRST’
SS2 DB 30 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LOOP NEXT;(CX)-1=>CX,若(CX)≠0,则转NEXT, 实际上本句与MOV CX,30共同完成了将LOOP 与标号NEXT之间的指令循环执行30次的功能
MOV AH,4CH
INT 21H
CODE ENDS
END START
MOV SI,OFFSET SS1 ;SS1的位移量=>SI
MOV DI,OFFSET SS2 ;SS2的位移量=>DI
MOV AL,[SI]
MOV [DI],AL
INC SI ; (SI)+1=>SI
INC DI ; (DI)+1=>DI
MOV CX,30 ;循环次数30=>CX
NEXT:
方法二: 用DB定义30个字节的字符数据表的方法来
定义的数据块SS1.
DATA SEGMENT
SS1DB’1’,’2’,’3',’4’,’5’,’6’,’7’,’8’,’9’,’0’,'A’,’B’,’,C’,’D’,’E’,’F’ DB ’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’P’,’Q’,’R’,’S’,’T’
SS2 DB 30 DUP(?)
DATA ENDS
这种定义和方法一定义的存储方式完全相同.
采用变址寻址,用变址寄存器SI来寻址SS1和SS2。这里SI是相对位移量,相当于高级语言数组的下标, 可以用SS1[SI],SS2[SI]来访问SS1、SS2中的各字节。因此,SI的值应从0~29,每循环一次,SI加1。用CX寄存器控制循环 30次。
1:选定准备定位的图标
2:打开“修改”菜单下的“图标”/“属性”对话框
3:在“设计”项定位:
“位置”栏选定“在预定区域内”
“可移动性”栏中选定“在预定区域内”
点击“起点”栏后再点击对象/最后点击“终点”栏后再点击对象
4:点击“确定”退出
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA MOV DS,AX MOV SI,0 MOV CX,30 ;循环次数30=>CX
NEXT: MOV AL,SS1[SI] MOV SS2[SI],AL
INC SI ;(SI)+1=>SI
LOOP NEXT;(CX)-1=>CX,若(CX)≠0