汇编语言实验二

合集下载

实验二拆字、拼字程序

实验二拆字、拼字程序

班级:2学号:姓名:成绩:实验二拆字、拼字程序一实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。

二实验内容1.把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。

ORG 0660HSE02: MOV DPTR,#2000HMOVX A,@DPTRMOV B,A;(2000)→A→BSW AP A;交换ANL A,#0FH ;屏敝高位INC DPTRMOVX @DPTR,A;送2001HINC DPTRMOV A,BANL A,#0FH ;(2000)内容屏敝高位MOVX @DPTR,A;送2002HSJMP $END2. 把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节ORG 0680HSE03: MOV DPTR,#2000HMOVX A,@DPTRANL A,#0FH ;(2000H)内容屏敝高位SW AP A;交换MOV B,A;保存INC DPTRMOVX A,@DPTR ;(2001H)内容送AANL A,#0FH ;屏敝高位ORL A,B ;或INC DPTRMOVX @DPTR,A;送2002HSJMP $END三实验步骤编译、装载程序,以连续或单步方式运行程序,检查2000~20FFH中执行程序前后的变化。

四思考1.将2000的高低位分别送入3000H、3001H的高位, 3000H、3001H低位清零;ORG 0660HSE02: MOV DPTR,#2000HMOVX A,@DPTRMOV B,A;(2000)→A→BSW AP A;交换ANL A,#0FH ;MOV DPTR,#3000HMOVX @DPTR,A;送3000HINC DPTRMOV A,BANL A,#0FHMOVX @DPTR,A;送3001HEND2.把片内20H,21H的高位拼在一起送到片内30H单元。

汇编语言实验报告

汇编语言实验报告

合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三. 实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

附加题:1. 从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x2. 完成BX中1的个数的统计。

3. 用串操作指令将DS:0000开始20个字节初始化为:0CCH。

并将这20个字节的内容复制到其后的20个字节里。

四. 实验结果(包括必要的截图)基础题 1:基础题 2:附加题 1:附加题 2:附加题 3:五. 实验体会1. 在汇编语言中,变量的其实都是地址。

2. 在Debug中,数值都是16进制的。

3. 在读写内存中的数据时,必须指出数据类型是byte还是word。

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

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

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的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。

02实验二 ARM汇编语言程序设计

02实验二 ARM汇编语言程序设计

实验二 ARM汇编语言程序设计一、实验目的1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程2.掌握ARM汇编指令二、实验设备1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。

2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真器驱动程序。

三、汇编语言简介1.ARM汇编的一些简要的书写规范ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。

ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。

在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。

注释使用“;”号,注释的内容由“;”号起到此行结束,注释可以在一行的顶格书写。

详细的汇编语句及规范请参照ARM汇编的相关书籍、文档。

2. ARM汇编语言程序的基本结构在ARM汇编语言程序中,是以程序段为单位来组织代码。

段是相对独立的指令或数据序列,具有特定的名称。

段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。

一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。

可执行映像文件通常由以下几部分构成:◆一个或多个代码段,代码段为只读属性。

◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。

◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。

链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。

源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。

3. 简单的小例子下面是一个代码段的小例子AREA Init,CODE,READONLYENTRYLDR R0, =0x3FF5000LDR R1, 0x0fSTR R1, [R0]LDR R0, =0x3F50008LDR R1, 0x1STR R1, [R0]……END在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定义了一个名为Init的代码段,属性为只读。

实验2-用户登录验证程序的实现

实验2-用户登录验证程序的实现
DEC COUNT ;可尝试次数-1 JZ EXIT ;如果次数用完则退出 JMP U_MODULE
P_MODULE: MOV AH,2 ;换行 MOV DL,0AH INT 21H
MOV AH,09H ;DOS显示提示字符串 MOV DX,OFFSET PASSWORD INT 21H
MOV BX,OFFSET BUF1 MOV CX,LLL MOV COUNT,3
五、支撑毕业要求指标点
目标 3.1 使学生了解微型计算机硬件结构和微型计算机工作原理,掌握 Intel X86 指令系统。使学 生能够将掌握的软硬件相关工程基础知识,用于分析微型计算机及应用领域的相关工程问题。 目标 3.2 使学生掌握汇编语言程序设计方法,具备汇编语言程序开发能力,能够根据实验方案,配置 实验环境、开展实验,进行数据分析与处理,综合实验结果以获得合理有效的结论。
U_MODULE: ;用户名模块
3
MOV AH,09H ;DOS显示字符串 MOV DX,OFFSET MESG1 ;取偏移地址 INT 21H
MOV AH,0AH ;等待从键盘输入的字符串(在屏幕上显示),并保存在缓 冲区
MOV DX,OFFSET BUF;DX=缓冲区首地址 INT 21H
;判断用户名是否正确 MOV DI,OFFSET BUF+2 MOV SI,OFFSET USER CLD
10
六、指导教师评语 (含学生能力达成度的评价)
成绩
批阅人
日期
评分项 评 遵守实验室规章制度
学习态度
算法思想准备情况
程序设计能力

解决问题能力
课题功能实现情况
算法设计合理性
算法效能评价
回答问题准确度

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

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

汇编语言实验二查找匹配字符串一、目的查找匹配字符串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' ;数字。

实验二、1简单并行接口

实验二、1简单并行接口

int 21h
mov ah,06 mov dl,0ffh int 21h jnz exit je start exit: mov ah,4ch int 21h code ends end 244程序流程图 ;若无,则转start ;返回DOS ;是否有键按下
八、实验结果
并行输出接口实验结果 并行输入接口实验结果
保存时输入自命名的源程序“XXX.ASM ”
为扩展名)
(“.ASM”
在“Alt+F”中,选择“EXIT ”退出文本编辑环境
3
图1
图2
使用汇编程序MASM.EXE (微软工具),对 源程序进行汇编,生成OBJ文件。 C:\> MASM (进入汇编环境) Source filename [.ASM]: xxx.asm
;返回DOS
code segment assume cs:code
start:
mov dx,2a0h
in al,dx mov dl,al mov ah,02
;从2A0输入一数据
;将所读数据保存在DL中 ;显示ASCII为DL的数据
int 21h
mov dl,0dh int 21h mov dl,0ah ;显示换行符 ;显示回车符
3
使用连接程序LINK.EXE (微软工具),对 OBJ文件进行连接。只有正确的OBJ文件,才能进 行连接操作。将OBJ文件与库函数或其他目标程序
进行连接成可执行的目标程序-EXE文件。
C:\> LINK (进入连接环境) Object Modules [.OBJ]: xxx.obj Run File [XXX.EXE]: List File [NUL.MAP]: Libraries [.LIB]: Warning: No STACK segment (忽略) There was 1 error detected. C:\> XXX.EXE (执行程序)

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一汇编语言的源程序的输入一、实验目的1.通过实验了解和熟悉微机系统的配置2.学习在DEBUG状态下输入汇编源程序的方法3.初步掌握调试(在DEBUG状态下)的过程二、实验原理1.本实验在DEBUG状态下输入汇编源程序,并且用DEBUG命令进行调试,用单步跟踪的方法试验指令的功能;2.以下是给定的参考程序,并在实验时每条指令的“;”等号右边按要求填写指令的分析结果。

三、实验步骤1.开机后进入DOS系统2.用DEBUG的REGISTER命令检查所有寄存器内容,并作记录R[寄存器名]3.用DEBUG的ASSEMBLE命令输入汇编源程序A[内存地址]4.用DEBUG的UNASSEMBLE命令反汇编U[起始地址][终止地址]5.用DEBUG的TRACE命令单步跟踪程序T[起始地址][终止地址]6.用DEBUG的DUMP命令显示存贮器单元的内容四、参考程序及结果MOV AX,2000 ;AL=00MOV DS,AX ;DS=2000NOT AX ;AX=DFFFXOR AX,AX ;AX=0000DEC AX ;AX=FFFFINC AX ;AX=0000MOV BX,2030 ;BH=20MOV SI,BX ;SI=2030MOV [SI],BL ;[2030H]=30MOV WORD PTR[SI],10F ;[2030H]=0F [2030H]=01 MOV DI,SI ;DI=2030MOV [DI+50],BH ;[DI+50]=20MOV BH,[SI] ;BH=0FMOV BL,[DI+50] ;BL=20MOV SP,5000PUSH AX ;AX=0 [SS:4FFEH]=00H [SS:4FFFH]=00H PUSH BX ;BX=0F20 [SS:4FFCH]=20H [SS:4FFDH]=0FH POP AX ;AX=0F20POPF ;F=00000000NEG BX ;BX=F0E0XCHG BX,AX ;BX=0F20STD ;F=01010001STI ;F=01110001CLD ;F=00110001CLI ;F=00010001ADC DI,2050 ;DI=4081 F=00000010ADC SP,DI ;SP=9081 F=10010010ADC AX,1500 ;AX=05E0 F=00000001SUB AX,BX ;AX=F6C0 BX=0F20SHL AH,1 ;AH=ECRCL AX,1 ;AX=D981SHR BX,1 ;BH=07RCR BL,1 ;BL=90MOV CL,4MOV DX,80F0ROL DX,CL ;DX=0F08 CL=04INT 20 ;CS=00A7 IP=1072实验二数据的建立与传送程序一、实验目的1.学习DEBUG命令2.验证指令的功能二、实验原理在DEBUG状态下,输入程序,用G命令进行连续方式执行程序,用DUMP命令查看建立的数据块内容三、参考程序及结果1.在内存1000单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小,程序从内存CS:0100H地址开始输入MOV AX ,100HMOV DS ,AXMOV SI,0MOV CL ,0FHXOR AX,AXPPE1: MOV [SI] ;ALINC SI ;INC ALDEC CLJNZ PPE1MOV CX,10HPPE2:MOV[SI],ALINC SIDEC ALLOOP PPE2INT 20H数据块的内容1000:0000:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:0100:0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 002.把上一程序的执行结果分几种方式传送到以下指定区域(a)该程序从内存CS:0150H开始输入,把数据块传送到15050H 开始的存储区域中MOV AX,1000HMOV DS,AXMOV SI,0MOV DI,5050HMOV CX,1FHPPEA: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP PPEAINT 20H结果:1000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入MOV AX,100HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5150HMOV CS,1FHCLDPPEB: MOVSBLOOP PPEBINT 20H结果:1000:5150 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5160 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(C)用重复串操作指令”REP MOVSB”把数据传送到15250H开始的区域,该程序从CS:250H地址开始输入MOV AX,1000HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5250HMOV CX,1FHCLDREPZMOVSBINT 20H结果:1000:5250 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5260 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(c)用串操作的减量工作方式,把数据传送到25050H开始的区域,该程序从CS:0300H开始输入MOV AX,1000HMOV DS,AXADD AX,AXMOV ES,AXMOV SI,1EHMOV DI,506EHMOV CX,1FHSTDREP MOVSBINT 20H结果:2000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 2000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00实验四统计学生成绩程序一、实验目的进一步掌握分支程序和循环程序的编写方法二、实验原理设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100和80分。

汇编语言学习知识程序设计实验

汇编语言学习知识程序设计实验

汇编语⾔学习知识程序设计实验⽬录⽬录 (1)实验⼀利⽤DEBUG熟悉常⽤指令的使⽤ (2)⼀、实验⽬的 (2)⼆、⽰例 (2)三、实验题 (2)实验⼆汇编程序和连接程序的使⽤ (6)⼀、实验⽬的。

(6)⼆、⽰例。

(6)三、实验题。

(8)实验三顺序结构程序设计 (11)⼀、实验⽬的 (11)⼆、⽰例 (11)三、实验题 (12)四、实验报告 (15)实验四循环结构程序设计 (16)⼀、实验⽬的 (16)⼆、⽰例 (16)三、实验题 (18)实验五分⽀结构程序设计 (21)⼀、实验⽬的 (21)⼆、⽰例 (21)三、实验题 (22)实验六⼦程序设计 (29)⼀、实验⽬的 (29)⼆、实验题 (29)实验⼀利⽤DEBUG熟悉常⽤指令的使⽤⼀、实验⽬的熟悉指令系统,掌握常⽤指令的⽤法;通过实验加深对各种寻址⽅式的理解;能熟练使⽤DEBUG中的命令对指令进⾏反汇编,观察并了解机器代码。

⼆、⽰例请分别⽤⼀条汇编语⾔指令完成如下功能:(过程略)。

1.⽤寄存器BX和SI的基址变址寻址⽅式把存储器的⼀个字节与AL寄存器的内容相加,并把结果送到AL中。

ADD AL,[BX][SI]2.⽤位移量为0520H的直接寻址⽅式把存储器中的⼀个字与3412H相加,并把结果送回该存储单元。

ADD WORF PTR [0520H],3412H三、实验题1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执⾏完后AX寄存器的内容。

要求输⼊指令,相应存储单元的内容要事先设置,单步P执⾏,观察执⾏结果。

(设置存储器的值)①.MOV AX,1200H②.MOV AX,BX③.MOV AX,[1200H]④.MOV AX,[BX]⑤.MOV AX,1100[BX]⑥.MOV AX,[BX][SI]⑦.MOV AX,1100[BX][SI]⑧ .MOV AX,[BP+SI+04]2、上机调试、验证教材习题3.15。

arm汇编语言编程实验报告

arm汇编语言编程实验报告

arm汇编语言编程实验报告实验二ARM汇编语言编程实验.doc班级计算机科学与技术(嵌入式)学号课程名称ARM体系结构姓名实验成绩日期指导教师冯灵霞实验报告院系信息工程学院一、实验目的1、掌握ADT IDEARM开发环境中基本的工程设置以及程序编译方法。

2、掌握ADT IDEARM开发环境中基本的程序调试方法。

3、掌握基本的ARM汇编语言编程方法。

二、实验内容用汇编语言编写一个程序实现如下目的:从源地址拷贝num个字(num*4个字节)的数据到目的地址dst中。

三、预备知识1、ARM汇编语言的基础知识。

2、程序调试的基础知识和方法。

四、实验设备1、硬件:JXARM9-2440教学实验箱、PC机。

2、软件:PC机操作系统Windows 98(2000、XP)+ADT IDE开发环境。

五、基础知识ADT IDE集成了GNU汇编器arm-elf-as、编译器arm-elf-gcc和链接器arm-elf-ld。

在ADT IDE中编写的程序必须符合GNU的语法规则。

下面介绍一些基本的GNU汇编知识以及本实验用到的ARM 汇编指令。

1、GUN汇编语言语法及规则1)_start_start为程序默认入口点,代码段默认起始地址为0x800,如果需要修改可以在链接脚本文件中指定。

2)标号语法:symbol:symbol为定义的符号。

说明:上述代码定义一个标号,它表示程序中当前的指令或数据地址。

如果在程序中出现两个相同的标号,汇编器将会产生一个警告,且只有第一个标号有效。

2、GNU汇编语言伪操作1).equ伪操作语法:.equ symbol,exprexpr为基于寄存器的地址值、程序中的标号、32位的地址常量或位的常量。

symbol为.equ伪操作为expr定义的字符名称。

说明:该操作符为数字常量、基于寄存器的值和程序中的标号定义一个字符名称,相当于C语言中的宏定义。

示例:.equ USERMODE,0x102).global伪操作符语法:.global symbolsymbol为声明的符号的名称。

汇编语言程序设计2

汇编语言程序设计2

目录系统认识 (1)实验一数码转换编程及程序调试 (5)实验二运算类编程实验 (11)实验三分支程序、循环程序设计实验 (16)实验四子程序设计实验 (22)实验五显示程序实验 (26)实验六串行通讯应用实验 (27)附录WMD86 联机软件使用说明 (40)系统认识一、实验目的掌握TD-PITE微机原理与接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。

二、实验设备PC微机一台,TD-PITE实验装置一套。

三、实验内容编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。

四、实验步骤1. 运行Wmd86软件,进入Wmd86集成开发环境。

2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1所示。

语言选择后,下次再启动软件,语言环境保持这次的修改不变。

在这里,我们选择汇编语言。

图13. 语言选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图2所示。

默认文件名为Wmd861。

图24. 编写实验程序,如图3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。

图3程序:SSTACK SEGMENT STACK ;定义堆栈段DW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000H ;建立数据起始地址MOV CX, 16 ;循环次数AA1: MOV [SI], ALINC SI ;地址自加1INC AL ;数据自加1LOOP AA1AA2: JMP AA2CODE ENDSEND START5. 点击,编译文件,若程序编译无误,则输出如图4所示的输出信息,然后再点击进行链接,链接无误输出如图5所示的输出信息。

图4图56. 连接PC与实验系统的通讯电缆,打开实验系统电源。

(汇编语言实验)实验二算术运算类操作实验

(汇编语言实验)实验二算术运算类操作实验

实验二算术运算类操作实验姓名:***学号:**********班级:05211101专业:通信工程一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。

6、掌握BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验思想本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:1.加减法处理指令主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。

2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。

3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD 码调整指令AAM,除法的非压缩BCD 码调整指令AAD。

8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表1 所示的数据类型进行数据运算。

四、实验内容与步骤1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。

2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。

汇编语言实验报告二

汇编语言实验报告二

汇编语言实验报告)(实验二实验二)一.实验目的1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。

2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。

3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

二.程序说明1.计算1+2+3+…+10,将结果显示在屏幕上。

2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。

编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。

三.设计思想1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。

2、使用si寄存器,用于在存储器中寻址。

利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。

利用01号功能,输出。

四.程序代码程序一code segment main proc far assume cs:code start: push ds sub ax,ax push ax mov bx,0ah mov cx, 0ah sum1: add ax,bx dec bx loop sum1 printit: mov bl,10 div bl add al,30h mov ch,ah mov dl,al mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h ret main endp code ends end 程序二程序二data segment ;数据段定义开始数据段定义开始buf db 10 dup(?) ;数据定义及其存储空间数据定义及其存储空间 max db ? min db ? Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容的内容 Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容的内容 Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容的内容 data ends ;数据段定义结束数据段定义结束Stack segment stack ;堆栈段定义开始堆栈段定义开始db 10 dup(?) stack ends ;堆栈段定义结束堆栈段定义结束code segment ;代码段定义开始代码段定义开始main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,10 mov si,0 ;寄存器,用于寻址寄存器,用于寻址mov bx,0 lop1: lea dx,Str1 mov ah,09 int 21h mov ah,01h ; 输入输入int 21h mov buf[si],al inc si loop lop1 ;返回循环1 mov cx,9 mov si,0 mov al,buf[si] mov bl,al lop2: inc si mov dl,buf[si] cmp dl,al jl compare1 mov al,dl compare1: cmp bl,dl ;比较,小的数放在bl jl compare2 mov bl,dl compare2: loop lop2 mov max,al mov min,bl lea dx,Str2 mov ah,09 int 21h mov dl,max mov ah,02h int 21h ;输出最大数输出最大数lea dx,Str3 mov ah,09 int 21h mov dl,min mov ah,02h int 21h ;输出最小数输出最小数ret main endp code ends end start 五. 结果分析并回答: 1. 设计的程序包含了几个段设计的程序包含了几个段 2. 你的代码经过编译和连接之后,总共占用多少个字节你的代码经过编译和连接之后,总共占用多少个字节3. 调用DEBUG 进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?指令的地址码是多少?4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能个数字的累加功能5.对于第2题,若要求输入的是两位数,又该怎么办?题,若要求输入的是两位数,又该怎么办? 程序一:运行结果运行结果1、本程序包含了一个段,即为代码段、本程序包含了一个段,即为代码段2、代码经过编译和连接之后,共占32个字节个字节3、第一条指令的地址码、第一条指令的地址码最后一条指令的地址码最后一条指令的地址码程序二运行结果运行结果1、本程序包含了数据段、堆栈段和代码段三个段。

汇编语言实验二

汇编语言实验二

4、
结果分析
2、在DEBUG环境下输入“U 0100”,查看。
3、在DEBUG环境下输入“r”回车,查看CPU所有寄存器和标示位。再输入“r ip”回车,然后输入修改数值(该实验为0),回车,修改成功,再次输入“r”查看修改是否成功。
4、在DEBUG环境下输入“D DS:0”,查看数据内容,再输入“E DS:5 12 34”,修改数据段5、6号的内容为12、34,再次输入“D DS:0”查看是否修改成功。
2、用DIR命令查看根目录下的文件。
进入DOS环境,然后输入dir,回车
3、用CD命令进入Program Files子目录,并查看子目录中的文件。
进入DOS环境,输入”d \”,退回c盘,然后输入“cd Program Files”,进入programs files文件夹,再输入“dir”,回车查看文件。
验结果
1、
2、
3、
结果分析
实验内容
实验二,DEBUG命令用法
1、进入DEBUG,用D命令查看数据段中的0100H——0200H单元的内容。
2、用U命令查看代码段中的0100H开始的程序。
3、用R命令查看并修改IP寄存器的值为0.
4、用E命令修改数据段5号、6号单元的内容为12、34。
实验步骤
1、进入DOS环境,输入“cd\”,再输入“debug”,进入DEBUG。然后输入“D DS:0100 0200”,查看0100H——0200H单元的内容。
实验内容
实验一,DOS命令用法
1、用两种方法进入DOS环境
2、用DIR命令查看根目录下的文件。
3、用CD命令进入Program Files子目录,并查看子目录中的文件。
实验步骤

《汇编语言》课程实验指导书

《汇编语言》课程实验指导书

《汇编语言》课程实验指导书《汇编语言》课程实验指导书扬州大学信息学院计算机科学与工程系 2007年5月实验一 DEBUG的使用(一)目的及要求进一步熟悉常用的单、双操作数指令和各种寻址方式的功能及使用格式,初步掌握调试程序DEBUG程序的基本使用方法,为以后的实验打下基础。

(二)实验内容1、用 DEBUG的基本命令,单步执行y=(x-1)2+30的程序,检查每条指令执行后目的地址及有关寄存器的内容。

2、用DEBUG的A命令,键入如下程序段: MOV BX,8275HMOV AX,3412H ;双精度数34128275H——AX、BX ADD BX,92A5HADC AX,2F65H ;加上双精度数2F6592A5H ADD BX,0EAE6HADC AX,9C88H ;加上双精度数9C88EAE6H然后用T命令单步执行,查看每条指令执行后有关寄存器的内容及标志位的变化。

注意:①用A命令时键入的数均为十六进制,故其后的“H”不要键入.②用T命令不适合执行“INT”指令。

3、学会使用DEBUG中的命令:D、G、E、R、T、A、U,为后面调试运行汇编源程序打下基础。

实验二分支、循环程序设计(一)目的及要求1、进一步理解条件转移指令的格式及功能,以便在分支程序中选用合适的指令。

2、提高设计及调试分支程序的能力。

3、掌握循环程序的结构及循环控制方法,提高循环程序的设计能力。

(二)实验内容1、用 DEBUG的基本命令,执行P120例5-2程序。

2、根据以下各题的要求写出其源程序井上机调试运行,显示(或打印)出运行结果。

①从键盘输入一字符串存放在IN-BUF 缓冲区中,然后在下一行以相反顺序显示出来。

②以附录1的格式显示(或打印)出 ASCll码表。

对于无法显示出的格式符或功能符,如空白0、响铃7、换行OAH、回车ODH、空格4DH等均用空格代替。

实验三子程序设计(一)目的及要求1、熟练掌握子程序的设计方法与调用方式,并能正确地书写子程序说明。

汇编实验报告实验二

汇编实验报告实验二

上机完成一周内,按照班级发到grape_heather@文档命名规则:学号姓名实验二(再下一次实验三。

)实验报告课程名称汇编语言程序设计实验项目实验二简单指令编程实验仪器系别专业班级/学号学生姓名实验日期______________成绩_______________________指导教师________________一.实验目的1.掌握基本指令的应用,并能完成相应功能。

2.通过顺序结构学习汇编语言程序设计的方法。

二.实验要求1.Windows操作系统并具有命令提示符操作界面的计算机,且系统内安装有汇编语言编程环境。

2.在开始本实验之前,复习教科书的相关内容,并预先写出相应的源程序。

3.通过DEBUG上机调试,注意观察,并记录下现象。

三.实验内容2.1 数据传送指令练习使用本实验提供的框架结构创建一个汇编语言源程序,然后汇编,连接,生成.exe文件。

采用简化段定义格式的源程序:.model small.386.stack 100h.data;define your data here.codeMain procMov ax,@dataMov ds,ax;define your code hereMov ax,4c00hInt 21hMain endpEnd main采用完整段定义格式的源程序:Data segment;define your data hereData endsStack segment pare stackDw 100h dup(0)Stack endsCode segment ‘code’Main proc farAssume ds:data,cs:code,ss:stackStart:Mov ax,dataMov ds,ax;define your code hereMov ax,4c00hInt 21hMain endpEnd main2.2 请分别用一个程序段完成如下要求:将一个字节数据FDH输出到端口21H;将AL中的两位BCD码分离,分别存放DL和DH中;将AL中的8位有符号数转换成它的绝对值;将DX、AX寄存器中的32位数实现算术右移一位;计算7×8。

实验二 汇编语言程序上机过程及调试

实验二    汇编语言程序上机过程及调试

实验报告二课程微机原理实验名称汇编语言程序上机过程以及调试第页专业电子信息班级__ __ 学号_ __ 姓名实验日期:2014 年 3 月10 日报告退发(订正、重做)一、实验目的学习汇编语言程序设计的基本步骤,即编辑(EDIT)程序、汇编(MASM)、连接(LINK)和运行,使对汇编语言程序设计有一个初步的认识。

二、实验内容1、学习使用全屏幕文本编辑软件EDIT。

用EDIT输入一段给定的源程序。

2、用MASM对已存盘的源程序进行汇编,形成目标文件(.OBJ);如有错误,再返回到EDIT进行修改。

3、用LINK对上述形成的目标文件进行连接,形成可执行文件(.EXE)4、在DOS提示符下运行该可执行文件。

[汇编语言程序的编写格式]汇编语言程序一般由几个段组成,它们分别是堆栈段,数据段,代码段。

任何一个源程序至少必须有一个代码段和一条作为源程序结束的伪指令END。

段的定义有两种格式,分述如下:1,完整的段定义格式:一个段由段头,段体,段尾组成,形式如下:段名SEGMENT[定位类型][组合类型][‘类别’]……段名ENDS其中SEGMENT后的参数一般可省略,详细说明参阅后面的有关章节。

2,简化的段定义格式(MASM5.0版本提供)每段以.开始后跟固定的段名,一般形式如下:DOSSEG.MODEL 存储类型;“存储类型”可选择为SMALL。

.STACK[大小];堆栈段,“大小”指定堆栈的字节数。

.DATA;数据段。

.CODE[名字];代码段;一般只有一个代码段,名字可缺少……例1:用完整的段定义编写一源程序。

NAME EXAM1;可以省略DATA SEGMENT;定义数据段,以下是数据段的内容STR1 DB “HELLO,WELCOME!”,13,10,‘$’STR2 DB “DO YOU LIKE COMPUTER?(Y/N)”,13 10,‘$’STR3 DB “NICE!”,13,10,‘$’STR4 DB “SORRY!”,13,10,‘$’STR5 DB “UNKNOW,ANSWER AGAIN!(Y/N)”,DB 13,10,‘$’STR6 DB “SEE YOU NEXT TIME!”,13,10,‘$’DA TA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE;DS:DATA;以下是代码段内容START:MOV AX,DA TA;给数据段寄存器赋值MOV DS,AXMOV AH,9;显示一字符串的功能号MOV DX,OFFSET STR1;显示字符串STR1的偏址INT 21H;DOS功能调用ASK :MOV DX,OFFFSET STR2;显示字符串STR2INT 21HMOV AH,1;键盘输入一字符的功能号INT 21H;键入的字符ASCⅡ码在ALNOT AL;求反TEST AL,‘Y’;是否按下‘Y’或‘y’键JE NEXT1TEST AL,‘y’JE NEXT1TEST AL,‘N’;是否按下‘N’键或‘y’键JE NEXT2TEST AL, ‘n’JE NEXT2MOV DX,OFFSET STR5;不是按上述键MOV AH,9INT 21HJMP ASK;再返回ASKNEXT1:MOV DX,OFFSET STR3;是按下‘Y’或‘y’键MOV AH,9INT 21HJMP BYENEXT2:MOV DX,OFFSET STR4;是按下‘N’或‘n’键MOV AH,9INT 21HBYE:MOV DX,OFFSET STR6INT 21HMOV DL,7;喇叭响的ASCⅡ码MOV AH,2INT 21HMOV AH,4CH;退回DOSINT 21HCODE ENDS;代码段结束END START;源程序结束注:源程序中的每一行注释语句前一定要加分号‘;’,下同。

汇编语言第二次实验报告

汇编语言第二次实验报告

《汇编语⾔言》第⼆二次实验姓名:任凯学号:139074018循环和分⽀支程序设计⼀一、实验⺫⽬目的1、掌握循环程序的设计⽅方法。

2、进⼀一步熟悉利⽤用DEBUG程序修改参数的⽅方法,并检查和验证结果的正确性。

3、学会针对不同的问题,选⽤用不同的组织循环的⽅方法。

4、掌握分⽀支程序的设计⽅方法。

5、掌握汇编语⾔言源程序的编辑、汇编、连接及调试过程。

⼆二、实验内容:1、编写⼀一个程序,显⽰示AL寄存器中的两位⼗十六进制数。

2、编写⼀一个程序,判断键盘上输⼊入的字符;若是1-9字符,则显⽰示之;若为A-Z或a-z字符,均显⽰示“c”;若是回⻋车字符<CR>(或其他ASCII码为0DH),则结束程序,若为其他字符则不显⽰示,继续等待新的字符输⼊入。

三、实验源码1、编写⼀一个程序,显⽰示AL寄存器中的两位⼗十六进制数。

通过汇编连接成功⽣生成可执⾏行⽂文件流程图2、编写⼀一个程序,判断键盘上输⼊入的字符;若是1-9字符,则显⽰示之;若为A-Z或a-z字符,均显⽰示“c”;若是回⻋车字符<CR>(或其他ASCII码为0DH),则结束程序,若为其他字符则不显⽰示,继续等待新的字符输⼊入。

流程图统计不同成绩段学⽣生的⼈人数⼀一、实验⺫⽬目的:1、掌握分⽀支、循环、⼦子程序调⽤用、DOS功能调⽤用等基本的程序结构。

2、掌握综合程序的编制及调试⽅方法。

⼆二、实验内容:设有⼗十个学⽣生成绩分别是76,69,84,90,73,88,99,63,100和80分。

试编制⼀一个⼦子程序,统计低于60分,60〜~69分,70〜~79分,80〜~89分,90〜~99分和100分的⼈人数,并输出显⽰示统计结果。

成绩分等部分采⽤用分⽀支结构,统计所有成绩则⽤用循环结构完成,显⽰示统计结果采⽤用DOS功能调⽤用。

计学⽣生成绩和显⽰示统计结果两部分内容⽤用⼦子程序结构来完成。

三、实验源码。

中南大学汇编语言实验二

中南大学汇编语言实验二

实验2实验学时: 2 实验地点:二综实验日期:一、实验目的掌握汇编编程规范,熟悉编程环境。

二、实验内容DA TAS SEGMENTdb "welcome to masm"DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DATASMOV DS,AXmov ax,0b800hmov es,axmov bx,7b4hmov si,0mov cx,7s0: ;显示welcomemov al,ds:[si]mov es:[bx],almov es:[bx+1],02hadd bx,2inc siloop s0add bx,2inc simov cx,2s1: ;显示tomov al,ds:[si]mov es:[bx],almov es:[bx+1],24hadd bx,2inc siloop s1add bx,2inc simov cx,4s2: ;显示masmmov al,ds:[si]mov es:[bx],almov es:[bx+1],71hadd bx,2inc siloop s2s: ;为了显示,我这边做个死循环jmp short sMOV Ax,4CH ;这边去掉我所谓INT 21HCODES ENDSEND START编程:参考教材实验9,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm’。

三、实验步骤算法及关键代码DA TAS SEGMENTdb "welcome to masm"DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DATASMOV DS,AXmov ax,0b800hmov es,axmov bx,7b4hmov si,0mov cx,7s0: ;显示welcomemov al,ds:[si]mov es:[bx],almov es:[bx+1],02hadd bx,2inc siloop s0add bx,2inc simov cx,2s1: ;显示tomov al,ds:[si]mov es:[bx],almov es:[bx+1],24hadd bx,2inc siloop s1add bx,2inc simov cx,4s2: ;显示masmmov al,ds:[si]mov es:[bx],almov es:[bx+1],71hadd bx,2inc siloop s2s: ;为了显示,我这边做个死循环jmp short sMOV Ax,4CH ;这边去掉我所谓INT 21HCODES ENDSEND START四、实验小结(简单说明实验过程中出现的问题和解决方法)。

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

福建农林大学计算机与信息学院实验报告
系:计算机专业:计算机年级:10
姓名:朱泽华学号:102260017020 实验室号__田513 计算机号102260017020 实验时间:指导教师签字:成绩:
实验二DEBUG的使用
1.实验目的和要求
(1)学习使用DEBUG的命令;
(2)使用DEBUG命令在数据段中查看程序运行的结果;
(3)利用DEBUG运行简单的程序段。

2.实验环境
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。

3.实验内容及实验数据记录
1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。

注意用T命令执行时,CS: IP寄存器的内容
使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。

注意用T命令执行时,CS: IP寄存器的内容
MOV AX, 4E20
ADD AX, 1416
MOV BX, 2000
ADD AX, BX
MOV BX, AX
ADD AX, BX
MOV AX, 001A
MOV BX, 0026
ADD AL, BL
ADD AH, BL
ADD BH, AL
MOV AH, 0
ADD AL, BL
ADD AL, 9C
2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。

如果是将小写字母改成大写字母带注释的语句该如何修改?
DSEG SEGMENT
MSG1 DB ‘abc’
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
START: MOV AX, DSEG
MOV DS, AX
LEA BX, MSG1
MOV CX, 3
S: MOV AL, [BX]
AND AL, 11011111B ;将AL中的ASCII码的第5位置0,
SUB AL,20H ;变成大写字母。

MOV [BX], AL
INC BX
LOOP S
MOV AL, 0
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
3)程序的跟踪执行操作
在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。

那么如何查看程序的运行结果呢?
程序执行过程的跟踪操作步骤如下:
(1)在DOS下输入:DEBUG 文件名.EXE
(2)在DEBUG提示符下输入U命令
如果程序中有数据段,可以看到反汇编后第一句可执行语句为: A 地址:B 地址 MOV AX, K 地址 如:1261:0000 MOV
AX, 1260
其中:K 地址就是数据段的段寄存器内容,A 地址为代码段段寄存器地址,B 地址为程
序第一条指令的偏移地址。

(3)可以用T 命令单步执行指令,执行到 MOV AH, 4CH 时结束,也可以用G 命令
执行整个程序,输入:G=B 地址(如:G=0000) (4)用D 命令查看程序执行后数据段的变化 输入:D K 地址:0 (如:D1260:0)
在显示的数据中,对照源程序或LST 文件查看结果所在的偏移地址的内容。

4)输入下面的程序,按实验一和上面的步骤运行一遍。

这是一个两个数相与的程序。

结果存放在MSG2单元中,偏移地址为?值为多少?
DSEG
SEGMENT
MSG1 DW 7856H, 2038H MSG2 DW ? DSEG ENDS
CSEG
SEGMENT
ASSUME
CS: CSEG, DS: DSEG
START: MOV
AX, DSEG
MOV DS, AX MOV AX, MSG1 AND AX, MSG1+2 MOV MSG2, AX MOV AL, 0 MOV AH, 4CH
INT
21H
CSEG ENDS
END
START
3.编写调试下面的程序,用DEBUG 查看数据段中的结果
1))/()510*)((Y X X W Z ++-=,X ,Y ,W 为字节类型变量,结果存于Z 单元,
写出数据段和代码段。

2)X ,Y 为字节类型数,求16/)2*)(8*)((Y X Y X Z --+=,写出完整的数据段和
代码段,不用乘除指令。

4.算法描述及实验步骤
第一题:
(1)在doc 下直接输入debug
(2)在debug提示符下输入A,然后按回车键
(3)页面自动出现一组地址,分别为段地址和偏移地址,直接在提示符后输入单条程序
(4)按回车键,出现第二组地址,直接按回车键
(5)在提示符下输入T,执行第一条指令
(6)重复(2)、(3),输入第二条程序,直至所有指令单步执行结束
第二题
(1)编写源程序,用记事本输入程序,并存储为源程序(保存在masm目录下),扩展名更改为1.asm
(2)对源程序进行汇编、连接
操作如下:
i.在dos状态下,进入masm目录
ii.输入命令:masm
iii.在系统出现的提示中输入:
Source filename [.asm]:输入1
Object filename[1.obj]:回车键
Source listing [nul.lst]:输入1,生成.lst文件
Cross-reference [nul.crf]:回车键
iv.出现提示出错,对源程序代码进行修改,重复执行以上步骤
v.输入:link 1.asm
vi.在系统出现的提示中输入:
Run file [1.exe]:输入1
List file[nul.map]:回车键
libraries[.lib]:回车键
vii.出现“no stack segment”警告,不理会。

生成了1.exe可执行文件
(3)程序的跟踪执行操作如下
i.在dos下输入:debug 1.exe
ii.在debug提示符下输入u命令
iii.用t命令单步执行指令
iv.用d命令查看程序执行后数据段的变化
第三题
(1)编写源程序,用记事本输入程序,并存储为源程序(保存在masm 目录下),扩展名更改为2.asm
(2)对源程序进行汇编、连接
操作如下:
viii.在dos状态下,进入masm目录
ix.输入命令:masm
x.在系统出现的提示中输入:
Source filename [.asm]:输入2
Object filename[1.obj]:回车键
Source listing [nul.lst]:输入2,生成.lst文件
Cross-reference [nul.crf]:回车键
xi.出现提示出错,对源程序代码进行修改,重复执行以上步骤
xii.输入:link 1.asm
xiii.在系统出现的提示中输入:
Run file [1.exe]:输入1
List file[nul.map]:回车键
libraries[.lib]:回车键
xiv.出现“no stack segment”警告,不理会。

生成了1.exe可执行文件
(3)程序的跟踪执行操作如下
v.在dos下输入:debug 1.exe
vi.在debug提示符下输入u命令
vii.用t命令单步执行指令
viii.用d命令查看程序执行后数据段的变化
(4)打开2.lst查看msg2的偏移地址和值
5.调试过程
第二题
汇编生成.lst文件时出错
对源程序的代码错误进行修改,之后汇编完成
连接生成.exe时出错
删除错误语句,连接完成
6. 实验结果
第一题
单步执行指令
第二题
T单步执行结果
第三题
U命令反汇编
T命令单步执行
D命令查看数据段变化
由2.lst可知msg2的偏移地址为0004H,值为? 第四题
7. 总结
对上机实验结果进行分析、上机的心得体会及改进意见。

附录:。

相关文档
最新文档