顺序和分支程序设计

版权声明:所有解释权归@A_slower_Erving https://blog.csdn.net/yeyuwei1027/article/details/79874260

--------------------------------------------------------------

最近在学习汇编语言,也做了两个实验,以此记录一下。

这里有很多汇编的学习资料--各种课件,实验,配置环境(↓),书籍等等(密码wxbl)

【环境配置】

先简单在64/32位机上配置汇编运行环境

1.下载Dosbox并安装

2.下载masm工具并解压到E盘(或其他盘)的DOS文件夹下

3.运行Dosbox,输入如下便可进入汇编环境(图中为把盘符c进行挂载到e目录下)

奋斗【顺序程序设计过程】

在E:\DOS文件夹下创建test1.txt,输入以下代码后保存更名位test1.asm(在20个学生中查询8号学生的成绩)

DATA SEGMENT
TABLE1 DB 81,78,90,64,85,76,93,82,57,80
	DB 73,62,87,77,74,86,95,91,82,71	
NUM DB 8
MATH DB ?
DATA ENDS

STACK1 SEGMENT PARA STACK
	DW 20H DUP(0)     //此处暂时无实际意义,以后要用到堆栈时才具体定义;还可以用于表示重复次数,DUP(?)表示duplicate(重复)?内容
STACK1 ENDS

CODE SEGMENT
	ASSUME CS:CODE, DS:DATA, SS:STACK1    //用ASSUME伪指令指示段与段寄存器的对应关系
BEGIN: MOV AX,DATA    //以下两行为将DATA中的段基值通过AX送到DS
	MOV DS,AX
	MOV BX,OFFSET TABLE1    //OFFSET为取TABLE1的偏移地址,与指令LEA BX,TABLE1等价
	XOR AH,AH
	MOV AL,NUM
	DEC AL
	ADD BX,AX
	MOV AL,[BX]
	MOV MATH,AL
	
	MOV AH,4CH    //以下两行为停机指令
	INT 21H
CODE ENDS
	END BEGIN    //汇编对代码的大小写是不敏感的

由上面代码可见,汇编程序由四个段组成:数据段,附加段,堆栈段,代码段

附加段:附加数据段,对应的是ES寄存器,用来访存串指令的目的串,一般情况下附加段省略;

                若有两个数据段,这ES指向该数据段(例如:DATA2)

然后:在Dosbox中,执行以下指令:tasm test1.asm——link test1.obj——debug test1.exe(进//入调试)

-U://反汇编命令,可以看到源代码,内存偏移地址或段基值等等

示例:0770:0000 B86A07     MOV     AX,076A    (此处的076A为DATA数据段的段基值)

分别为 段基址:偏移地址  机器代码   指令代码     

(注:由于内存的分段管理,“段基址:偏移地址”为逻辑地址,指向物理地址)

-R://查看各寄存器的内容

!!其中DS中显示的并不是数据段的段基值,而是存放数据的地方,而数据段的段基值必须是076A

-D://给出DATA段在内存的起始地址

以下为错误操作:应该给出起始地址和终止地址(实为给出DATA的逻辑初始地址)

正确操作如下:076A为DATA的段基值

此时显示的正是20个学生的成绩(16进制),第21个为要查询的学生的号码

-G://执行汇编程序

此时再执行-D命令,可见要查询的学生的成绩已经放在第22位(偏移地址为21)

…………

分支程序设计与前面过程相似,下面只给出源代码

TEST.ASM     //把buffer中87,234,123三个数按大到小重新排列存回缓冲区

DATA SEGMENT
	BUFFER DB 87,234,123
DATA ENDS


STACK1 SEGMENT PARA STACK
	DW 20H DUP(0)
STACK1 ENDS


CODE SEGMENT
	ASSUME CS:CODE,	DS:DATA, SS:STACK1

START:MOV AX,DATA
	MOV DS,AX
	MOV SI,OFFSET BUFFER
	MOV AL,[SI]
	MOV BL,[SI+1]
	MOV CL,[SI+2]

	CMP AL,BL
	JNB NEXT1
	XCHG AL,BL
NEXT1:CMP AL,CL
	JNB NEXT2
	XCHG AL,CL
NEXT2:CMP BL,CL
	JNB NEXT3
	XCHG BL,CL
NEXT3:  MOV [SI],AL
	MOV [SI+1],BL
	MOV [SI+2],CL

	MOV AX,4C00H
	INT 21H
CODE ENDS

	END START
	

-----------------------------------------------------------------------------------------END--------------------------------------------------------------------------------------------------

                                                                                    未完待续,望路过大神不吝指点。

                                                                                     A slower never walks backwards.

                                                                                                                            ----A_slower

猜你喜欢

转载自blog.csdn.net/yeyuwei1027/article/details/79874260