实验二 汇编语言指令实验(二)

合集下载

汇编语言实验报告

汇编语言实验报告

合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一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。

汇编实验2讲解

汇编实验2讲解

实验二循环与子程序程序设计一、实验目的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从键盘输入。

三、实验设备PC机一台四、实验步骤1) 按程序流程图编制实验程序。

2) 输入源程序。

3) 汇编、连接程序,执行程序,检查结果。

4)对内存单元3000H开始的100个存储单元用E命令输入任意数。

5) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。

6) 用D命令检查执行结果。

五、实验报告的要求1)列出源程序。

2)对程序中用到的寄存器说明其功能。

3)总结计数控制循环程序的设计方法。

4) 说明怎样使用DEBUG进行程序调试的。

调试过程中所遇到的问题是如何解决的。

实验2-1源程序:DATA SEGMENTBUF DB '1+2*3+3*4+4*5+...+N(N+1)=$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,01HMOV BX,01HL1:INC BXMOV AX,BXINC AXMUL BL;(进行乘法运算,bl作为乘数)ADD DX,AX;(DX作为累加变量)CMP AX,200;N(N+1)是否大于200JBE L1MOV BX,DXLEA DX,BUFMOV AH,09HINT 21H;输出字符串MOV CX,4LOP:MOV AX,4MOV DX,BXMUL CLSUB AX,4MOV AH,ALMOV AL,CLMOV CL,AH;SHR DX,CL;cl作为移位位数寄存器AND DX,0FHCMP DX,0AHJBE L2ADD DX,7HL2:ADD DX,30HMOV CL,AL;MOV AH,02HINT 21HLOOP LOP;输出数据MOV AH,4CHINT 21HCODE ENDSEND START运行结果:实验2-2源程序:stack1 segment para stackdw 20h dup(0)stack1 endscode segmentassume cs:code,ss:stack1 start:mov ax,300hmov ds,axmov cx,100;cx作为循环变量lop:mov bx,cx ;bx作为地址偏移mov al,0h ;al为0,目的是清零mov -1[bx],alloop lopmov ah,4chint 21hcode endsend start运行结果:实验2-3源程序:data segmentBUF DB 09H,09Hdata endsstack1 segment para stackdw 20h dup(0)stack1 endsCODE SEGMENTassume cs:code,ds:data,ss:stack1,es:data START:MOV AX,DATAMOV DS,AXAND CX,0000HMOV CL,09H;;cl作为循环变量L1:MOV BUF,CLMOV CL,09HL2:MOV BUF+1,CLMOV AL,10SUB AL,BUFMOV DL,ALOR DL,30HMOV AH,02HINT 21HMOV DL,'*'MOV AH,02HINT 21HMOV BL,10SUB BL,BUF+1MOV DL,BLOR DL,30HINT 21HMOV DL,'='INT 21H;会运行一段小程序,使AX的值改变AND AX,0000HMOV AL,10SUB AL,BUFMOV DL,ALMUL BLMOV BL,10DIV BLMOV DL,ALMOV DH,AHOR DL,30HMOV AH,02HINT 21HMOV DL,DHOR DL,30HMOV AH,02HINT 21HMOV DL,' 'INT 21HMOV CL,BUF+1LOOP L2INT 21HMOV CL,BUFLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START运行结果:实验2-4源程序:data segmentM DB 20HLS DB 00HLP DB 00Hdata endsstack1 segment para stack dw 20h dup(0)stack1 endsCODE SEGMENTassume cs:code,ds:data,ss:stack1,es:data START:MOV AX,DATAMOV DS,AXMOV AL,03HMOV AH,00HINT 10HMOV CX,5L1:MOV LP,CLMOV BX,6HSUB BX,CXMOV LS,BLMOV BH,00HMOV DH,LSMOV AL,MAND AH,00HSUB AL,LSMOV DL,ALMOV AH,02HINT 10HMOV AL,LSAND AH,00HMOV BX,2MOV AL,LSMUL BLSUB AL,1MOV LS,ALMOV AH,9HMOV AL,'*'MOV BH,0MOV BL,0DHMOV CL,LSAND CH,00HINT 10HMOV CL,LPAND CH,00HLOOP L1MOV AH,4CHINT 21H CODE ENDS END START运行结果:实验2-5源程序:STACK SEGMENT STACK DW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK START:MOV AH,01HINT 21HAND BX,0000HSUB AL,30HMOV BL,ALMOV AH,01HINT 21HSUB AL,30HAND CX,0000HMOV CL,ALMOV AX,01HAND DX,0000HCALL MPUSH AXMOV BX,DXCALL SHOWPOP AXMOV BX,AXCALL SHOWMOV AH,4CHINT 21HM PROCSUB CX,1HJBE LCALL ML:PUSH DXMUL BXMOV CX,AXPOP AXPUSH DXMUL BXPOP DXADD DX,AXMOV AX,CXRETM ENDP SHOW PROCMOV CX,4L2:PUSH CXMOV CL,4ROL BX,CLMOV DL,BLAND DL,0FHCMP DL,0AHJB L3ADD DL,07H L3:ADD DL,30HMOV AH,02HINT 21HPOP CXLOOP L2RETSHOW ENDP CODE ENDSEND START运行结果:实验2-6源程序:STACK SEGMENT STACK DW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK START:MOV AH,01HINT 21HAND BX,0000HSUB AL,30HMOV BL,ALMOV AH,01HINT 21HSUB AL,30HAND CX,0000HMOV CL,ALMOV AX,01HAND DX,0000HCALL MPUSH AXMOV BX,DXCALL SHOWPOP AXMOV BX,AXMOV AH,4CHINT 21HM PROCSUB CX,1HJBE LCALL ML:PUSH DXMUL BXMOV CX,AXPOP AXPUSH DXMUL BXPOP DXADD DX,AXMOV AX,CXRETM ENDP SHOW PROCMOV CX,4L2:PUSH CXMOV CL,4ROL BX,CLMOV DL,BLCMP DL,0AHJB L3ADD DL,07H L3:ADD DL,30HMOV AH,02HINT 21HPOP CXLOOP L2RETSHOW ENDP CODE ENDSEND START运行结果:。

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

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

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

汇编实验报告2

汇编实验报告2

实验二指令系统与程序结构一、实验目的1.掌握算术运算指令、逻辑指令、转移指令的应用方法2.掌握伪指令的使用方法。

3.掌握汇编程序的结构。

4.进一步熟悉debug的使用。

二、实验内容1.运行debug,使用a 100命令输入下列程序段:Mov cl,8Rol ax,clInt 3u 100反汇编;用r命令将本人班级学号(如0801)输入ax,用单步运行命令p执行,记录最后ax的值,分析该段程序完成的功能。

若输入ax的值是1234h,程序段执行后ax的值是多少。

用a 100 指令输入,u100 指令反汇编如图:用r指令写入ax的值,用p指令执行如图;由于p是单步执行命令,所以有的输入后要执行几次才出结果:如输入0801,执行两次p命令后,ax变为0108;从新打开一个DOS窗口,再次输入ax=1234;执行两次p指令后ax变为3412;总结,此程序功能为把ax中的数据循环左移8位;2.输入并调试下列程序汇编后如图·链接后如图成为可执行文件:1.用debug 装入该程序(注意记录数据):使用u命令反汇编该程序,观察;连续2次使用p命令,观察段寄存器的值的变化;观察到:DS从0C2D变为0C3D;其他段寄存器无变化;分别为:ES=0C2D,SS=0C41,CS=0C51,;2.用D ds:0观察数据段的数据;用g 1f 执行到断点,再观察ds:0的数据变化情况。

说明红色区代码的功能。

数据段的变化如图:用g 1f命令执行到断点,ds:0观察结果如图:分析红色代码区功能为换行并空两个字符,打印十个字符;用 g 33执行到断点处,再观察ds:0的数据变化情况。

说明蓝色区代码的功能。

将蓝色代码的循环结构改为使用条件转移指令实现。

分析:紧接着打印8个字符,代码改为: xor si,sixor di,dimov cx,8next:mov dl,str[si+10]mov buf0[di],dlinc siinc dijmp next结果如图:实验总结:汇编实验看似简单,其实很有内涵,如不认真操作并寻找规律,很难出结果。

汇编指令实验报告二

汇编指令实验报告二

实验步骤和结果:
(1)打开Keil uVision,在“Project”—>“New uVision Project”新建一个名为42的工程并为其选择ARM芯片,如下图:
(2)在新建的工程里新建一个名为e.s的文件,在“Project workpace”将文件导入工程中,如下图
(3)在e.s文件里输入如下汇编代码:
AREA EX4_43,CODE,READONLY
ENTRY
CODE32
START LDR R1,=0x90010 ;加载X的地址->R1
LDR R2,[R1] ;加载X的值->R2
CMP R2,#0 ;与0比较
BEQ ZERO ;为0跳转到ZERO处理
BGT PLUS ;大于0跳转到PLUS处理
MOV R0,# -1 ;否则小于0,将R0设置为-1
B FINISH ;跳转到结束
PLUS MOV R0,#1 ;大于0,将R0设置为1
B FINISH ;跳转到结束
ZERO MOV R0,#0 ;等于0,将R0设置为0
FINISH STR R0,[R1] ;将结果R0保存
B START
END
(4)在“project”—>“Options for Target”Target1””—>“Target”做相应设置;,结果如下图:
分配只读内存范围
去掉最上面的勾
在“Debug”选项添加“Debug.ini”文件
(5)编译运行代码,并调试代码,寄存器地址变化结果如下图:
(6)查看其反汇编机器码,结果如下所示:
查看控制台结果。

汇编实验二

汇编实验二

实验二:内存操作数,寻址方法及操作指令实验目的1、熟练掌握DEBUG的常用命令,学会使用DEBUG调试程序。

2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。

3、掌握简单指令的执行过程。

实验内容1、设DS=当前段地址,BX=0300H,SI=0002H,DI=0005H,BP=0008H,请用DEBUG的命令将存储器偏移地址300H~309H连续单元顺序装入06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH。

在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

程序清单如下:MOV AX,0304HMOV AX,BXMOV AX,[0304H]MOV AX, [SI]MOV AX. [DI]MOV AX,[BX]MOV AX, [BP+1]MOV AX,0002[BX]MOV AX,[BX][SI]MOV AX,[BX+SI+1]2、在debug中调试实现DX=25+48-19 的程序段。

要求:用A命令汇编、用T单步跟踪执行,并分析每步执行的结果,最后用R命令检查DX寄存器中的计算结果。

在debug中调试程序段之前,要求用E命令将25,48,19的非压缩BCD码0205H、0408H和0109H存入DS段中[0000H]—[0005H]六个单元。

程序段:MOV AX,0MOV AL,[0000H]ADD AL,[0002H]AAAMOV DL,ALMOV AL,[0001H]ADC AL,[0003H]AAAXCHG AL,DLSUB AL,[0004]AASXCHG AL,DLSBB AL,[0005]AASMOV DH,AL实验要求1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。

2、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序、调试程序和执行程序。

实验2汇编语言基本指令操作练习指导书

实验二汇编语言基本指令操作练习一、实验要求和目的1、掌握汇编语言程序开发的整体流程;2、熟练掌握使用记事本编辑汇编语言源程序;3、熟练掌握汇编程序MASM的使用;4、熟练掌握连接程序LINK的使用。

二、实验涉及的主要知识单元1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。

目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。

列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。

交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。

.LST 和.CRF两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。

在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。

因此,汇编程序的主要功能可以概括为以下三点:(1) 检查源程序中的语法错误,并给出错误信息;(2) 产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);(3) 展开宏指令。

汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推出的宏汇编程序MASM(MACRO ASSEMBLER)和BORLAND公司推出的TASM(TURBO ASSEMBLER)两种。

汇编语言实验2

汇编语⾔实验2⼀、实验⽬的1. 理解并掌握汇编源程序组成与结构2. 掌握汇编语⾔源程序编写→汇编→链接→调试的⼯具和⽅法3. 理解汇编源程序中地址表⽰、段寄存器的⽤法4. 理解和掌握寄存器间接寻址⽅式[bx]5. 通过汇编指令loop的使⽤理解编程语⾔中循环的本质⼆、实验准备1. 学习/复习第5章使⽤[bx]和loop实现循环的编程应⽤⽰例(教材5.5节,5.8节)2. 复习第3章「栈」的知识3. 结合第4章课件,复习完整汇编源程序编写→汇编→连接→运⾏→调试的⽅法4. 复习8086汇编中内存单元地址的表⽰,以及段寄存器DS, SS, ES, CS的⽤途三、实验内容1. 实验任务1 使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex1.asm。

源代码如下:1;ex1.asm2 assume cs:code3 code segment4mov ax, 0b810h5mov ds, ax6mov byte ptr ds:[0], 17mov byte ptr ds:[1], 18mov byte ptr ds:[2], 29mov byte ptr ds:[3], 210mov byte ptr ds:[4], 311mov byte ptr ds:[5], 312mov byte ptr ds:[6], 413mov byte ptr ds:[7], 414mov ah, 4ch15int 21h16 code ends17 end要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex1.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。

使⽤masm、link对ex1.asm进⾏汇编、链接,得到可执⾏⽂件ex1.exe,运⾏并观察结果使⽤debug⼯具对程序进⾏调试使⽤debug加载可执⾏⽂件ex1.exe后,使⽤d命令查看程序段前缀PSP所占的256个字节。

结合可执⾏⽂件中寄存器CX的值,使⽤u命令对ex1.exe进⾏精确反汇编使⽤g命令执⾏到程序退出执⾏之前(即源码⽂件中line16之前),观察结果2. 实验任务2使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex2.asm。

汇编语言实验报告2

调试程序功能段一、实验目的1.继续学习使用DEBUG程序的各种命令。

2.利用DEBUG学习了解计算机取指令、执行指令的工作过程。

3.掌握8086/8088基本指令的使用方法和功能。

二、实验任务1.按照下列给定步骤完成求累加和程序:程序:MOV BX,1000MOV CX,10MOV AL,0LOP: ADD AL,[BX]INC BXJ: L OOP LOPINT3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。

2)用命令N AA将此程序命名为文件AA(文件名可任取)。

3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) ,用R命令把BX设为:0000H,CX 设为文件长度。

4)用命令W 100将此程序存到AA命名的磁盘文件中。

5)用命令Q退出DEBUG。

6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。

若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。

7)8)用E命令在内存地址1000H处键入16个数字9)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。

10)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样, 若不一样,检查程序是否有错。

11)重复G J与T,再检查AX是否正确。

(J为断点地址)12)用G命令使程序运行到结束,检查AX值是否正确。

2.用命令A汇编下列指令,判断指令正误并说明原因。

(1)LEA DI,[AX](2)MOV DS,2010(3)PUSH AL(4)OUT 900,AL(5)MOV [BX],03.利用T,P,G命令,执行下列指令段,注意它们的不同之处。

(6)MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3(7)MOV AH,2MOV DL,41INT 21INT 34.程序: MOV DI,1000MOV CX,8MOV SI,2000CLCLOP: MOV AL,[SI]ADC[DI],ALINC SIINC DILOOP LOPINT20步骤:1)用A命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

汇编指令实验2

汇编指令实验2
一、实验内容
《1》使用MOV和MVN指令访问ARM通用寄存器。

《2》使用ADD、SUB、AND、ORR、CMP和TST等指令完成数据加减运算及逻辑运算。

二、实验程序
三、实验步骤及现象
《1》启动ADS1.2,使用ARM Executable Image 工程模版建立一个工程Insturction2。

《2》建立汇编源文件TEST3.S,编写实验程序,然后添加到工程中。

《3》根据上一次实验的步骤设置工程连接地址
《4》写程序,编写完程序后,进行错误检查,若无误,则进行软件仿真调试。

《5》点击,打开寄存器窗口,选择Current项监视各寄存器的值。

《6》单步运行程序,观察寄存器值的变化
四、思考
(1)指令MOV R0,#0x12345678是否正确?为什么?
不正确,
立即数超出了这个操作。

(2)将参考程序中应用CMP指令的代码,功能改为“若(5*Y/2)>(2*X)则R5=R5|0x000000FF,否则R5=R5&0Xffff0000”,程序应如何修改?
(3)更改参考程序的X的值为200,Y的值为163,单步运行程序,每执行一步程序的结果是多少?
(4)如何实现64位加法运算(R6,R)=(R6,R5)+(R3,R2)? ADDS R5,R5,R2
ADC R6,R6,R3
五、反思
1、MOV与MVN的不同:MOV数据传送;MVN数据非传送。

2、
3、看书掌握其它ARM数据处理指令的使用方法。

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

实验二汇编语言指令实验
一、实验目的
学习常用汇编语言指令中通用传送指令、输入输出指令、目标地址传送指令、加减、比较指令等的使用方法和功能,为今后调试程序做准备。

二、实验内容:
1.进入文件。

(步骤见实验一)
2.综合利用debug命令,键入和执行简单的汇编指令,并查看结果。

(1)学习立即数传送到寄存器或内存的MOV指令
-A 100↙(键入指令)
****:0100 mov ax,39↙
****:****↙
-T=****:0100 1↙(或-T)(执行指令)
-R↙(查看AX寄存器内容)
(同样的方法试验 MOV DX ,99和MOV [100],88(注意用D 命令查看)并记录结果)
(2)学习从内存单元传送到寄存器的MOV指令
-E 100↙(修改DS:100、101内存单元内容为5678H)
-R AX↙(查看AX寄存器内容)
-A 100↙
****:0100 mov ax,[100]↙
****:****↙
-T=****:0100 1↙(或-T)
-R AX↙(查看AX内容)
(3)学习PUSH,POP指令,观察AX,BX内容交换。

-R↙
查看AX,BX的值;若AX,BX一样,则用R命令修改成不一样的。

- R AX↙
然后执行以下交换指令。

-A 100↙
****:0100 push ax↙
****:**** push bx↙
****:**** pop ax↙
****:**** pop bx↙
****:****↙
R (查看执行前AX,BX的内容)
-T =****:0100 4↙
(4)学习XCHG指令,观察AX,DX内容交换。

-R↙
查看AX,BX的值;若AX,BX一样,则用R命令修改成不一样的。

- R AX↙
然后执行以下交换指令。

-A 100↙
****:0100 xchg ax,bx↙
****:****↙
R (查看执行前AX,BX的内容)
-T =****:0100 1↙
(5)学习输入指令,并观察AX寄存器前后的变化。

-R AX(观察AL的值)
-A 100↙(键入指令)
****:0100 IN AL,22↙
****:****↙
-T =****:0100 1(执行指令)(或g=100 ***)(6)学习取有效地址指令LEA,观察AX,BX的变化。

-R↙(观察AX,BX的值)
-A 100↙
****:0100 LEA AX,[EEEE]↙
****:**** LEA BX,[1234]↙
****:****↙
-T=****:0100 2↙(或-T)(或g=100 ***)
(7)学习ADD,SUB指令,观察AX,BX内容。

-A 100↙
****:**** MOV AX,20↙
****:**** MOV BX,30↙
****:**** ADD BX,10↙
****:**** SUB AX,10↙
****:****↙
-T=****:0100 4↙(或-T)(或g=100 ***)
(8)学习CMP指令,两数比较,大者放在DX里。

-A 100↙
****:**** MOV AX,11
****:**** MOV BX,55
****:**** CMP BX, AX↙
****:**** JNC 010C↙
****:**** MOV BX,AX↙
****:010C MOV DX,BX↙
****:****↙
-T=****:0100 6↙(或-T)(或g=100 ***)
三、实验器材
IBM PC 微机一台
四、实验要求:
1、掌握常用通用传送指令、输入输出指令、目标地址传送指令、加减、比较指令的使用方法和功能。

2、掌握正确使用debug命令运行汇编指令。

五、实验报告要求:
1、写出本实验的内容和实验步骤。

2、整理出运行结果。

3、小结实验指令的功能。

相关文档
最新文档