汇编语言 实验七子程序设计2

合集下载

7汇编语言程序设计 (2)共53页

7汇编语言程序设计 (2)共53页

13.11.2019
单片机原理及其应用
19
7.2 算术运算程序的设计
开始
被除数的高八位大于除数 Y
置溢出标志
N 除法(移位)次数
结束
余数左移一位
保留余数移出的最高位
余数的高八位减去除数
Y
够减否?
差为余数的高八位
N
商0 商1
图7.5 除法程序流程图
除法完?
N
Y 四舍五入处理
清溢出标志
结束
13.11.2019
例7 设单片机系统采集的8个单字节数据存储在单片机内
部RAM的30H开始的连续单元中,求它们的均值。 N 计算一组数据平均值的公式为:x xi N,其中,x i 为第i个
数据,N为数据的个数。因此,要计算i出1 平均值需要进行2种
运算:求数据的总和、数据总和除以数据个数。
(1)求数据的总和
汇编程序设计的步骤: (1)分析题目或课题的要求,正确理解解决什么问 题,如何解决问题、有哪些可利用的资源、对计算 精度的要求等;另外,了解应用系统硬件的结构和 功能与课题任务的关联。 (2)确定解决问题的方案,画出程序流程框图; (2)根据解决方案,确定变量及其数据存储格式, 给各个变量分配存储空间; (3)根据程序流程图,选用合适的指令编写程序, 完成源程序的设计; (4)在集成开发环境上调试,完成设计要求的功能。
13.11.2019
单片机原理及其应用
6
7.1 伪指令
(4) 定义双字节数据伪指令DW
[xxxxH] DW data16
如: 1000H DW 0FDE1H
1100H DW 1345, 2241, 34556
(5) 位地址赋值伪指令BIT

微机实验二_汇编语言程序设计

微机实验二_汇编语言程序设计

3.2 实验二汇编语言程序设计3.2.1 实验目的1)进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念;2)熟练掌握动态调试程序TD/DEBUG的常用命令或窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器等环境;3)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS功能调用的基本方法。

3.2.2 实验环境实验环境同实验一。

3.2.3 基本实验内容1)基本实验内容和要求(1)编写程序实现如下功能;①从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其他字符不变)并按原顺序将这些字符在屏幕上显示出来。

②从键盘输入在0-65535之间的十进制数,将其转换为16进制数并在屏幕中显示出来,要求判断输入字符串是否为在0-65535之间的十进制数。

(2)复习功各种操作,并用DEBUG调试程序,学会基本命令操作,并通过单步、设置断点等方法观察中间结果,完成正常运行。

命令行方式下直接键入debug myfile.exe回车(myfile为待调试可执行程序),进入调试方式(显示—),键入H回车显示全部命令、格式和功能。

常用命令有;U(反汇编)、A(汇编输入指令程序)、R(寄存器显示/修改)、I(端口输入)、0(端口输出)、D(显示数据)、E(修改数据)。

除资源修改管理功能外,重点应用T(单步)、Tn(执行n步)、P(过程/指令)、G××××(从当前器:IP执行到断点××××)或G=××××l ××××2(从××××l执行到××××2断点)调试实驴程序。

2)编程提示(1)小写字母的ASCII码比其所对应的大写字母的ASCII码值大20H,如字符“a”的ASCII 码为61H,而字符“A”的ASCII码为41H,因此字符变换时将小写字母的ASCII码减去20H即为大写字母的ASCII码。

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

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

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

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

实验准备用QE 或其它编辑软件,在计算机上编辑源程序,使其正确无误。

进入DEBUG 打入DEBUGT MYPROG.EXMYPRC 为所编程序的文件名。

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

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

2、 熟悉DEBU®序的使用方法。

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

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

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

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

四、实验步骤 1、 2、 汇编、连接源程序,产生.EXE 可执行文件。

3、 运行程序。

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

(3) 检查程序。

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

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

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

开始说明本实验中是如何使用 DEBU 进行调试的。

CX 、SI 、DI 置初值六、流 程图勤开始 设置增量方式CX 、 SI 、 DI 置初值 保存 SI 内容AL [SI] SI SI+ 源块长度[DI] AL N SI>DISI SI+1 恢复 SI 内容 恢复 SI 内容DI DI+1CX CX-1 设置减量方式N CX=0, SI 指向源块末尾DI 指向目的块末尾结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y五、 实验报告要求1、 列出程序清单,并给出程序流程图。

汇编语言实验七实验报告

汇编语言实验七实验报告

汇编语言实验七实验报告汇编语言实验七实验报告一、实验目的本次实验的目的是了解多重循环结构的编程技巧,并使用它们对数据进行排序和搜索。

二、实验内容本实验内容主要包括:1.使用多重循环结构实现数据的排序,如冒泡排序、快速排序等;2.使用多重循环结构实现数据的搜索,如线性搜索、二分搜索等;3.使用结构化编程实现控制结构,如条件判断、循环结构等来完成数据的排序和搜索。

三、实验过程1. 冒泡排序本实验使用多重循环结构,采用冒泡排序的方法,实现对一组数据的排序。

具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 0, 5, 2count dw 6temp dw ?.codemain procmov ax,@data mov ds,axmov ax,array mov si,axmov cx,count mov cl,2l1:mov di,simov bx,[di] inc dil2:mov ax,[di] cmp ax,bxjng l3mov temp,ax mov [di],bx mov bx,temp l3:inc diloop l2inc sidec cxjnz l1 ;循环结束 mov ax,countsub ax,2l4:mov di,simov ax,[di]mov bx,[di+2]cmp bx,axjng l5mov temp,axmov [di],bxmov [di+2],temp l5:inc sidec axjnz l4 ;循环结束 tmov ax,4c00hint 21hmain endpend main上述代码主要实现了多重循环结构,包括两个重复循环:一个用来对数据进行比较,另一个用来循环处理剩下的数据项,直到排序完成。

2. 线性搜索接下来实现线性搜索的功能,具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 5, 0, 2count dw 6key dw 4add dw 0.codemain procmov ax,@datamov ds,axmov ax,arraymov di,axmov cx,countl1:cmp [di], keyjne l3jmp l2l3:inc diloop l1l2:mov ax,add mov bx,count sub bx,1mul bxadd ax,key mov bx,2div bxinc axmov bx,4mul bxmov di,axmov ax,array add ax,dimov si,axmov ax,[si] mov bx,keyje l4mov ax,-1l4:mov ax,4c00hint 21hmain endpend main上述代码主要实现了线性搜索的功能,通过比较数组中的每一项与给定的关键字,如果相同,则记录下该项的偏移量,然后根据偏移量计算出索引,最终返回数组中搜索到的数据。

Removed_汇编语言 实验七子程序设计2

Removed_汇编语言 实验七子程序设计2

实验七子程序设计实验类型:综合性实验目的:1、掌握主程序与子程序之间的调用关系及调用方法。

2、掌握子程序调用过程中近程调用与远程调用的区别。

3、掌握通过堆栈转送参数的方法。

实验步骤:1、进入DOS环境2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用3、启动EDIT编辑器输入程序代码4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)5、运行命令MASM CHEN.ASM生成OBJ文件6、如果出错请回到第3步再纠正错误7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE 文件8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)9、执行反汇编U10、查看程序结束地址11、运行G 命令运行程序12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。

实验内容:从键盘输入一组十进制数据,按从小到大的顺序排列,并以十进制的形式输出。

要求:输入过程有键盘锁;输入、输出有提示;输入和输出之间换行。

data segmenta dw 7 dup(?)data endsdecihex segmentmain proc farassume cs:decihex,ds:datapush dsmov ax,0push axmov ax,datamov ds,axmov cx,07hlea si,aloop1:call decibinmov [si],bxadd si,2call crlfloop loop1;********************************mov cx,7dec cxloop3:mov di,cxlea si,aloop2:mov ax,[si]cmp ax,[si+2]jng cotixchg ax,[si+2]mov [si],axcoti:add si,2loop loop2mov cx,diloop loop3;*********************************call crlf;*********************************mov cx,7lea si,aloop5:call outputcall crlfadd si,2loop loop5retmain endp ;............................ decibin proc nearmov bx,0 newchar:mov ah,1int 21hsub al,30hjl exitcmp al,9djg exitcbwxchg ax,bxmov dx,10dmul dxadd bx,axjmp newcharexit: retdecibin endp ;............................. crlf proc nearmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hretcrlf endp ;............................. output proc near ; begin:mov ax,[si]mov bl,10div bl; output:mov dl,aladd dl,30hmov bl,ahmov ah,2int 21hmov dl,bladd dl,30hmov ah,2int 21hretoutput endp ;............................ decihex endsend。

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

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

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

二、实验环境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)加深对循环结构的理解。

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

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

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

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

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

二、实验内容1)编制在屏幕上显示九九乘法表的程序。

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

三、实验结果(1)(2)四、源代码(1)DA TA SEGMENTM DB 31H,32H,33H,34H,35H,36H,37H,38H,39H DA TA ENDSSTACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DA TAMOV DS,AXMOV CX,9MOV DI,OFFSET MLOP1:PUSH CXMOV CX,[DI]AND CX,0FHMOV SI,OFFSET M LOP2:MOV AL,[SI]MOV DL,ALMOV AH,2INT 21HAND AL,0FHMOV BH,ALMOV DL,'*'MOV AH,2INT 21HMOV BL,[DI]MOV DL,BLMOV AH,2INT 21HMOV DL,'='MOV AH,2INT 21HAND BL,0FHMOV AL,BHMOV AH,0MOV DL,10DIV DLMOV BL,AHCMP AL,0JE NEXTMOV DL,ALADD DL,30HMOV AH,2INT 21H NEXT:MOV DL,BLADD DL,30HMOV AH,2INT 21HMOV DL,' 'MOV AH,2INT 21HINC SILOOP LOP2MOV DL,0AHMOV AH,2MOV DL,0DHINT 21HINC DIPOP CXLOOP LOP1MOV AH,4CHINT 21HCODE ENDSEND START(2)STACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 BEGIN:MOV AH,1INT 21HMOV BL,ALSUB BL,30HMOV DL,0AHINT 21HMOV DL,0DHMOV AH,2INT 21HMOV BH,0MOV CX,BXMOV BX,1L1: PUSH CXMOV CX,BX L2: MOV DL,'*'MOV AH,2INT 21HLOOP L2MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HADD BX,1POP CXMOV AH,4CHINT 21HCODE ENDSEND BEGIN五、实验心得这是第二次做汇编实验,首先,心理上已经没有了第一次做实验的那种茫然,知道了想要编写一个完整的程序,应当先将这一个大问题分解成若干个小的问题,找出每一个小问题所对应的解决方法,然后用代码一步一步实现,再将这一个一个的小问题串联起来,找到它们的契合点,用联系把它们组成一个完整的程序,其中最常用的就是转移指令和循环。

汇编语言程序设计课程设计(第二次)

汇编语言程序设计课程设计(第二次)
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令ቤተ መጻሕፍቲ ባይዱ算术运算指令
本次实验目的
• 熟练掌握DEBUG的基本调试命令,能够使 用DEBUG编写、调试汇编语言程序片段。 • 在理解算术运算指令的基础上按照实验内 容中指定的程序片段对程序进行调试和记 录;
实验报告的主要内容
• 1)在实验报告中说明所学DEBUG基本命令的使 用方法。 • 2)分析指定的源程序,执行到指定位置后(在源 程序中有标注),寄存器、标志位的取值,解释 指令的执行原理,并在实验报告中对必要的寄存 器、标志位状态加以记载。 • 3)分析程序片段的功能,必在实验报告中加以说 明。
DEBUG:2. 内存单元查看命令D
• 功能:查看指定地址开始的内存区域中各 内存单元的内容。 • 使用方法: • -D 从默认数据段内存地址开始显示(或 接上次所显示的地址继续显示) • -D XXXX:XXXX 从指定内存地址开始 显示 • (演示)
DEBUG:2. 内存单元修改命令E
• 功能:修改指定地址内存单元的内容。 • 使用方法: • -E XXXX:XXXX • (演示)
注意事项
• 在调试上述程序片段时,应使用r命令先修 改DS、SS段寄存器,使之与CS指向不同 位置。 • 建议将DS提供的原始段基值加0100H,将 SS提供的原始段基值加0200H。 • 避免数据段、堆栈段内的操作覆盖代码段 中已录入的指令,影响重复调试。
DEBUG:1. 断点调试命令G
• 功能:从当前CS、IP指示的位置开始连续执行程 序,执行到指定断点处(不包括断点地址指示的 指令)暂停执行,在屏幕上显示CPU现场。 • • • • • 使用方法: -g 连续执行,无断点 -g XXXX:XXXX 连续执行到断点位置 注:断点位置必须指定为某条指令的首字节地址 (演示)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七子程序设计
实验类型:综合性
实验目的:
1、掌握主程序与子程序之间的调用关系及调用方法。

2、掌握子程序调用过程中近程调用与远程调用的区别。

3、掌握通过堆栈转送参数的方法。

实验步骤:
1、进入DOS环境
2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用
3、启动EDIT编辑器输入程序代码
4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)
5、运行命令MASM CHEN.ASM生成OBJ文件
6、如果出错请回到第3步再纠正错误
7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件
8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)
9、执行反汇编U
10、查看程序结束地址
11、运行G 命令运行程序
12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。

实验内容:
从键盘输入一组十进制数据,按从小到大的顺序排列,并以十进制的形式输出。

要求:输入过程有键盘锁;输入、输出有提示;输入和输出之间换行。

data segment
a dw 7 dup(?)
data ends
decihex segment
main proc far
assume cs:decihex,ds:data
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov cx,07h
lea si,a
loop1:call decibin
mov [si],bx
add si,2
call crlf
loop loop1
;********************************
mov cx,7
dec cx
loop3:mov di,cx
lea si,a
loop2:mov ax,[si]
cmp ax,[si+2]
jng coti
xchg ax,[si+2]
mov [si],ax
coti:add si,2
loop loop2
mov cx,di
loop loop3
;*********************************
call crlf
;*********************************
mov cx,7
lea si,a
loop5:call output
call crlf
add si,2
loop loop5
ret
main endp ;............................ decibin proc near
mov bx,0 newchar:
mov ah,1
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx
mov dx,10d
mul dx
add bx,ax
jmp newchar
exit: ret
decibin endp ;............................. crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp ;............................. output proc near ; begin:
mov ax,[si]
mov bl,10
div bl
; output:
mov dl,al
add dl,30h
mov bl,ah
mov ah,2
int 21h
mov dl,bl
add dl,30h
mov ah,2
int 21h
ret
output endp ;............................ decihex ends
end。

相关文档
最新文档