《汇编语言程序设计》课程实验二

合集下载

汇编语言-实验二 循环与子程序程序设计

汇编语言-实验二 循环与子程序程序设计

汇编语言-实验二循环与子程序程序设计
实验目的
本实验旨在通过学习循环和子程序的概念和使用方法,掌握汇
编语言中循环和子程序的程序设计技巧,培养学生的程序设计能力。

实验内容
1. 循环程序设计:编写一个循环程序,实现指定次数的循环操作。

2. 子程序程序设计:编写一个子程序,实现指定功能的模块化
程序设计。

实验步骤
循环程序设计
1. 根据实验要求确定需要循环的次数。

2. 初始化循环计数器,将循环计数器置为0。

3. 判断循环计数器是否达到循环次数的要求,如果达到则跳出
循环,否则继续执行循环体。

4. 执行循环体的操作。

5. 循环计数器自增1。

6. 返回到第3步继续判断循环条件。

子程序程序设计
1. 根据实验要求确定需要实现的功能。

2. 将要实现的功能封装在一个子程序中,确定输入参数和输出结果。

3. 在主程序中调用子程序完成指定的功能。

4. 如果需要,可以在子程序中调用其他子程序实现更复杂的功能。

实验
本次实验通过编写循环和子程序的程序设计,加深了对汇编语言中循环和子程序的理解。

循环程序设计能够实现重复执行指定次数的操作,提高了程序的效率;子程序程序设计能够实现模块化和可重用性,提高了程序的可读性和可维护性。

通过实践,进一步掌握了汇编语言的程序设计技巧,加深了对汇编语言的理解和应用能力。

参考资料
汇编语言程序设计教程
汇编语言程序设计实验指导书。

实验二:基础汇编语言程序设计

实验二:基础汇编语言程序设计

实验二:基础汇编语言程序设计TEC—2000教学计算机16位机实验指导TEC-2000教学计算机的监控程序用TEC-2000汇编语言实现,其主要功能是支持把计算机终端或PC机仿真终端接入教学机系统,通过终端设备运行教学机的有关程序,以方便直观的形式支持教学机的各项实验,提供教学机汇编语言的可用子程序。

进入监控程序的方法:1)打开实验箱的盖子,确认教学机电源开关处于断开状态,然后接上电源线;2)将通讯线的9芯插头接在教学机的串口“COM1”上,另一端接到PC机的串口,用PC机作为模拟终端;3)将教学机的控制开关设置为00101(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”;打开电源开关,5V电源指示灯亮;4)在PC机上运行PCEC16.EXE文件,根据所连接的PC机的串口,设置所用PC机的串口为“1”或“2”,其余的设置不用改动,直接回车即可。

注意:PC机必须运行在DOS操作系统上,不能运行在Windows的命令行模式下;5)按一下教学机的“RESET”键,再按一下“START”键后监控程序开始运行,同时主机显示以下的信息:TEC-2000 CRT MONITORVersion 2.0 2001.10Computer Architectur Lab., Tsinghua UniversityCopyright Jason He监控程序提供类似PC机DOS系统下的Debug程序的功能,支持A、U、G、P、T、R、D和E共8个监控命令。

监控命令的格式为:[监控命令] [地址/寄存器名参数]监控命令为单字母(大小写均可),命令名后可跟一个地址参数,或寄存器编号参数。

当命令名后无参数时,监控程序取默认的地址/寄存器编号参数值。

TEC—2000机从终端接收地址、指令、数值时,均用16进制数(最多4位)输入与显示,并且不能用字符h加以标志。

1、单条汇编命令A格式:A [adr][adr]表示地址参数,adr为任选项(选择范围为2000H—27FFH)。

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告一、实验目的1、了解循环程序设计的方法2、理解汇编语言中循环指令的使用3、掌握汇编语言中常用的循环结构二、实验原理1、循环指令循环指令是计算机中常用的一种控制结构,其作用是重复执行一定的操作。

在汇编语言中,常用的循环指令有LOOP、LOOPE、LOOPNE等,具体功能如下:(1)LOOP:重复执行指定次数的操作;(2)LOOPE:执行操作直到CX寄存器为0或ZF寄存器为1;(3)LOOPNE:执行操作直到CX寄存器为0或ZF寄存器为0。

LOOP指令的语法格式如下:LOOP label其中,label表示循环的目标地址。

2、循环结构循环结构是计算机程序设计中常用的一种结构,其基本形式包括:while、do...while、for等。

在汇编语言中,常用的循环结构有以下两种:(1)无限循环结构:该结构适用于需要不停顿地进行某项操作的情况,底层逻辑基于测试指令;(2)计数器循环结构:该结构适用于需要循环指定次数的情况,底层逻辑基于循环指令。

三、实验内容1、使用循环指令实现计算1~10的和;2、使用循环结构实现计算1~10的和。

四、实验步骤1、使用循环指令实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

2、使用循环结构实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

五、实验结果(1)使用循环指令实现计算1~10的和MOV CX,10MOV AX,0LOOP label1ADD AX,CXDEC CXJNZ label1label1:MOV sum,AX(2)使用循环结构实现计算1~10的和MOV CX,10MOV AX,0label2:ADD AX,CXDEC CXJNZ label2MOV sum,AX六、实验总结本次实验实现了两种不同的循环方式,分别使用了循环指令和循环结构。

汇编语言-实验二 循环与子程序程序设计

汇编语言-实验二   循环与子程序程序设计

实验二循环与子程序程序设计一、实验目的1) 加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5) 掌握子程序设计、编制及调试。

6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

2)将从3000H内存单元开始的100个字节存储单元全部清0。

3)编制在屏幕上显示九九乘法表的程序。

4)编制在屏幕上显示用*组成的三角形的程序。

5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。

6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。

三、源程序EXAM2-1DA TA SEGMENTBUF DB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’RES DW 4 DUP(0),’$’DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV DX, OFFSET BUFMOV AH,09HINT 21HMOV DX, 1MOV BL, 2NEXT:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,200JNA NEXTMOV CX,0004HMOV DI,OFFSET RESADD DI,03HNEXT1:MOV AX, DXAND AX, 000FHCMP AL,0AHJB NEXT2ADD AL,07NEXT2:ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL,04SHR DX,CLPOP CXLOOP NEXT1MOV DX,OFFSET RESMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START执行程序EXAM2-1·EXE,屏幕上显示结果:S=1+2×3+3×4+4×5+...+N(N+1)+ (045)EXAM2-2ORG 2000H2000 BF0030 MOV DI, 30002003 B164 MOV CL, 642005 C60500 MOV BYTE PTR[DI],02008 47 INC DI2009 FEC9 DEC CL200B 75F8 JNZ 2005200D F4 HLTEXAM2-3DATA SEGMENTA TAD DB ?, 2AH, ?, 3DH, ?, ?, 20H, '$'A TAD1 DB ?, 2AH, ?, 3DH, ?, ?, 0DH, 0AH, '$' DA TA ENDSSTACK SEGMENT STACKDB 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX, DA TAMOV DS, AXMOV CL, 09HMOV BL, 00HOKL:MOV AL, 00HINC BLOK1:INC ALPUSH AXCMP BL, ALJZ OKMOV BH, ALMUL BLMOV DI, OFFSET ATADCALL OKPPOP AXJMP OK1OK:MOV BH, ALMUL BLMOV DI, OFFSET ATAD1CALL OKPPOP AXLOOP OKLMOV AH, 4CHINT 21HOKP PROCPUSH AXPUSH BXPUSH CXADD BX, 3030HMOV [DI], BHMOV [DI + 02H], BLMOV CX, 0AHMOV DH, 00HOKL2:CMP AX, CXJS OK2ADD CX, 0AHINC DHJMP OKL2OK2:SUB CX, 0AHSUB AX, CXMOV AH, DHADD AX, 3030HMOV [DI + 04H], AHMOV [DI + 05H], ALMOV DX, DIMOV AH, 09HINT 21HPOP CXPOP BXPOP AXRETOKP ENDPCODE ENDSEND START执行程序EXAM2-2·EXE,屏幕上显示结果:1*1=011*2=02 2*2=041*3=03 2*3=06 3*3=091*4=04 2*4=08 3*4=12 4*4=161*5=05 2*5=10 3*5=15 4*5=20 5*5=251*6=06 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=07 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=08 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=09 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81EXAM2-4CODES SEGMENTASSUME CS:CODESSTART:XOR BX,BXMOV DL,2AHMOV CX,9LOP: PUSH CXINC BLMOV CL,BLMOV DL,2AHLOP2: MOV AH,02HINT 21HLOOP LOP2POP CXMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HCMP BL,9JZ ENDPROLOOP LOPENDPRO:MOV AH,4CHINT 21HCODES ENDSEND START执行程序EXAM2-4·EXE,屏幕上显示结果:*********************************************EXAM2-5STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDA TA SEGMENTBUF DW 0F101H,110DH,52H,100H,456H COUNT =($-BUF)/2RESULT DW 4 DUP(?),'$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK WDADD PROCPUSH DIMOV AX, 0MOV DX, 0MOV DI, OFFSET BUFNEXT2: ADD AX, [DI]JNC NEXT1INC DXNEXT1: ADD DI, 2LOOP NEXT2POP DIRETWDADD ENDPSHOW PROCPUSH CXPUSH DIMOV CX, 04HMOV DI, OFFSET RESULTMOV BX, AXADD DI, 07HBBB: MOV AX, BXAND AX, 000FHCMP AL, 0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR BX, CLPOP CXLOOP BBBMOV CX, 0004HCCC: MOV AX, DXAND AX, 000FHCMP AL, 0AHJB DDDADD AL, 07HDDD: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04HSHR DX, CLPOP CXLOOP CCCPOP DIPOP CXRETSHOW ENDPBEGIN: MOV AX, DATAMOV DS, AXMOV CX, COUNTCALL WDADDCALL SHOWMOV DX, OFFSET RESULTMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN执行程序EXAM2-5·EXE,屏幕上显示结果:000107B6。

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。

2、熟悉DEBUG程序的使用方法。

3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。

二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。

2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。

三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。

2、预习DEBUG调试程序的使用方法。

3、根据实验内容要求,编写好实验源程序。

四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。

2、汇编、连接源程序,产生.EXE可执行文件。

3、运行程序。

(1) 进入DEBUG。

打入DEBUGT MYPROG.EXE。

MYPROG为所编程序的文件名。

(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。

如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。

(3) 检查程序。

在程序中设置若干断点,以便杳出错误所在。

(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。

五、实验报告要求1、列出程序清单,并给出程序流程图。

2、总结实现数据传送的几种方法,指出它们的区别。

开始3、分析实验中所遇到的一些问题,分析错误原因。

4、说明本实验中是如何使用DEBUG进行调试的。

CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。

汇编语言实验二查找匹配字符串

汇编语言实验二查找匹配字符串

汇编语言实验二查找匹配字符串一、目的查找匹配字符串SEARCH二、实验内容程序接收用户键入的一个关键字以及一个句子。

如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。

流程图N YY Y输入关键字结束关键字长度=0输入句子句子长度<关键字长度Y保存关键字长度到cx ,cx 入栈,保存总循环次数(句子长度-关键字长度+1)到al ,将句子的首地址放进bx(作为基址寄存器) si=di=0(变址寄存器)开始比较[bx+di]与[si]是否相等si+1,di+1,cx-1(同时指向下一个字符)YN bx+1(句子指向下一个字符) cx 出栈,再入栈,si,di 清零,al-1 cx 是否为0N 匹配完成,调用子程序输出al 是否为0 不匹配,输出三、设计和编码DATA SEGMENTmess1 DB'Enter keyword:','$'mess2 DB'Enter Sentence:','$'mess3 DB'Match at location:','$' mess4 DB'NOT MATCH.',13,10,'$' mess5 DB'H if the sentence',13,10,'$'change DB 13,10,'$'stoknin1 label bytemax1 db 10act1 db?stokn1 db 10 dup(?)stoknin2 label bytemax2 db 50act2 db?stokn2 db 50 dup(?)DATA ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENT;*************************************代码段main proc farassume cs:code,ds:data,es:dataSTART:push dssub AX,AXsub BX,BXsub DI,DIsub SI,SIpush AX ;为返回dos并清空后面要用到的寄存器MOV AX,DATAMOV DS,AXLEA DX,mess1MOV ah,09INT 21h ;输出Enter keywordLEA DX,stoknin1MOV ah,0ah ;用21号中段的0ah号功能获取关键字INT 21hcmp act1,0je exit ;如果为空直接退出程序a10:;********************************输入Sentence并判断LEA DX,changeMOV ah,09INT 21h ;输出回程,换行LEA DX,mess2MOV ah,09INT 21h ;输出Enter Sentence:LEA DX,stoknin2MOV ah,0ahINT 21h ;用21号中段的0ah号功能获取句子MOV AL,act1CBWMOV CX,AX ;保存关键字长度到cxPUSH CX ;cx入栈MOV AL,act2cmp AL,0je a50 ;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1js a50 ;若句子长度小于关键字长度,则跳转显示not match INC ALCBWLEA BX,stokn2 ;将句子的首地址放进BXMOV DI,0MOV SI,0a20:;****************************************比较,内循环MOV AH,[BX+DI]CMP AH,stokn1[SI] ;遇见字符不相等就跳转到a30jne a30INC DIINC SIDEC CX ;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完CMP CX,0je a40jmp a20a30:;*****************************************外循环,BX+1,清空si,di继续内循环比较INC BXDEC ALcmp AL,0je a50MOV DI,0MOV SI,0POP CXpush CXjmp a20a40:;*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出SUB BX,offset stokn2INC BXLEA DX,changeMOV ah,09INT 21hLEA DX,mess3MOV ah,09INT 21hCALL btohLEA DX,mess5MOV ah,09INT 21hjmp a10;****************************************二进制转换十六进制btoh PROC NEARMOV CH,4rotate: MOV CL,4ROL BX,CLMOV AL,BLand AL,0fhadd AL,30hcmp al,3ahjl printitadd al,7hprintit:MOV dl,alMOV ah,2int 21hdec chjnz rotateretbtoh endpa50:;*****************************************显示not matchLEA DX,changeMOV ah,09INT 21hLEA DX,mess4MOV ah,09INT 21hjmp a10exit:retmain endpCODE ENDSEND START 四、运行结果及分析五、实验小结六、附录(选)。

汇编语言程序设计实验二及答案

汇编语言程序设计实验二及答案

实验二:汇编语程序设计一、实验目的旨在通过实验使同学了解汇编语言的程序结构和编程方法,可以编写出顺序程序、分支程序和一般的循环程序,并学会修改和调试方法。

二、实验环境MASM、LINK、DEBUG或包含此软件的相关软件三、实验内容1.1、从FIRST开始的100个单元中存放着一个字符串,结束符为$。

编写一个程序,统计该字符串中字母‘A’的个数。

DATA SEGMENTFIRST DB 'AGHI K…$’ ;定义字符串,结束符为$NUMBER DB ? ;结果存放单元DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX,DATA ;建立数据段的可寻址性MOV DS, AXMOV BL,0 ;BL用作统计计数器LEA DI,FIRST ;取字符串首址NEXT: MOV AL, [ DI] ;取一个字符INC DI ;指向下一个字符CMP AL,’$’ ;与结束符’$’比较JE EXIT ;等于,搜索完结束CMP AL , 'A ;与字符‘A’比较JNE NEXT ;不等于。

不统计INC BL ;找到,计数IMP NEXT ;继续EXIT: MOV NUMBER,BLMOV AH,4CHINT 21HCODE ENDSEND START2.编程判断输入的ASCII码字符时数字还是字母,并将判断结果分别以“D”和“L”显示出来。

解:用宏实现字符显示。

程序如下:DISPLAY MACRD CHAR;显示字符宏定义MOV DL,CHARMOV AH,02HINT 21HENDMCODE SEGMENTASSUME CS: CODESTART : MOV AH, 0lH ;输人一个ASCI I码字符INT 21 HCMP AL, '0’JC ERROR ;非数字和字母,转ERROR处理CMP AL, '9'JA NEXT ;非数字,转NERTDISPLAY 'D' ;数字。

实验二 汇编语言程序设计综合实验

实验二 汇编语言程序设计综合实验

实验二 汇编语言程序设计综合实验班级:电气类06 姓名:吴静 学号:1304200624说明:本实验所用软件和源程序均在路径:E:\Assembly 下,源程序名为ME2.asm,可执行文件名ME2.exe,源代码见文档末,运行的平台为dosbox 。

上机实验过程如下1. 编辑源程序2. 汇编源程序,连接目标程序(路径E:\Assembly 挂载在C 盘下)编译链接程序无错误,一次通过3. 运行可执行程序程序的基本功能已经完成,将十进制数转化为十六进制数4.添加按Esc键退出程序的功能从程序的运行结果可以看到,无论从什么时候按下Esc键,程序都会退出。

它的实现原理是:每次从键盘输入一个字时,就立即检测是否为1BH(Esc的Ascll码)。

如下如果是就跳到标号ESCEXIT(如下,具体见源代码)结束程序的运行。

5. 添加检查错误的功能(错误就是从键盘输入的数不是0~9或者13(Enter键的十进制Ascll码),检测到错误后就另起一行输出’Input Error’字符,显示可以重新输入十进制数)。

先观察一下程序执行的结果:接下来,就解释这个功能是如何实现的(重点,也是心血!)。

①添加一个可以显Input Error 的名为IERROR 的子程序(右图),它的数据在程序的开始段。

②当输入的字符不是0~9时,这里就修改一下,不是跳到EXIT,而是跳到INPUTE(右图),从而执行IERROR 子程序。

③在执行这个程序之前,已经判断输入的不为0~9,但是还要判断输入的是否为Enter 键(即13)。

所以加入一个判断的语句(左图),NEXT 就是继续运行程序。

这里我将SUB AL,30H 放在了后面,是为方便判断AL 是否为13。

从程序的运行结果可以看到,如果我们输入的是Enter(图中1234后面输入的就是Enter),那么程序正常执行,输出04D2;在我们输入数的过程中如果出现除0~9和13以外的数,那么程序就会输出Input Error,并且在另一行要求重新输入,并不会退出程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级:学号:姓名:
《汇编语言程序设计》课程实验二
一、实验内容:
进一步熟悉Debug命令的应用方法,编制汇编语言程序段并单步执行。

二、实验目的:
进一步熟悉调试指令debug的常用命令使用方法。

能熟练使用A命令进行汇编指令的编辑,通过完成实验任务能够:1、理解在汇编语言指令执行时数据是如何读取和写入的;2、理解堆栈的工作原理。

三、实验任务:
P74~75 实验任务(1)~(2)
四、实验步骤及结果:
实验任务
(1)使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax= 5BEA
mov ax,[2] ;ax= 5CCA
mov bx,[4] ;bx= 30F0
mov bx,[6] ;bx= 6028
push ax ;sp= 00FE ;修改的内存单元的地址是2200:00FE 内容为5CCA
push bx ;sp= 00FC ;修改的内存单元的地址是2200:00FC 内容为6028
pop ax ;sp= 00FE ;ax= 6028
pop bx ;sp= 0100 ;bx= 5CCA
push [4] ;sp= 00FE ;修改的内存单元的地址是2200:00FE 内容为30F0
push [6] ;sp= 00FC ;修改的内存单元的地址是2200:00FC 内容为2F38
(2)仔细观察图3.19的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
解析:mov ss,ax 后边跟上mov sp,10,这两条指令执行后靠近栈顶的10个字节中值立即有了变化,是对定义栈段时部分运行环境变量进行暂存,靠近栈顶的10个字节中的暂存数据分别是SS、IP、CS 等的值。

五、实验中遇到的问题及解决情况:
1.在第一小题的修改内存单元的地址时遇到了问题,在老师的分析下得到了答案,并且自己也理解了得到的答案。

2.在第二小题的操作过程中,分析的操作结果还不是很正确,在老师的指点下,更准确地得到了试验的结果。

相关文档
最新文档