微机原理子程序设计

合集下载

微机原理与技术实验四:子程序结构

微机原理与技术实验四:子程序结构

微机原理与技术实验四: 子程序结构实验四:子程序设计一、实验目的:掌握子程序结构, 熟悉汇编上机环•='二、实验内容: 设有数组SCORE存放学生的成绩(0-100分),编写一个子程序统计0~59分、60〜69分、70〜79分、80〜89分、90〜100分的人数,并分别存放到SCOREE. SCORED、SCOREC、SCORERSCOREA 单元中。

编写一个主程序与之配合使用。

二、实验步骤:1、在“轻松汇编”环境下编写、编译和生成程2、进入DEBUG界面,运行程序,观察SCOREE、SCORED> SCOREC、SCORED> SCOREA变量的值是否正确:在DEBUG下运行程序:F9键观察多个变量值:“Data” 9 “Add Watch” 今“输入变量1"“Data” 9 “Add Watch”今“输入变量2”DATA SEGMENTSCOREDB 80,78,45,81,90,72,60,75SCOREE DBSCORED DBSCOREC DBSCORED DBSCOREA DBDATA ENDSSTCK SEGMENTDB 10 DUP(?)STCK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STCKSTART:;以下为子程序COUNT PROC补全程序RET COUNT ENDP CODE ENDSMOV INTAH ,4CH 21H五、实验小结说明:实验报告要包涵上述五项DATA SEGMENTSCORE DB 80,7&45,81,90,72,60,75SCOREE DB 0SCORED DB 0SCOREC DB 0SCORER DB 0SCOREA DB 0DATA ENDSSTCK SEGMENTDB 10 DUP(?)STCK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STCKSTART:MOV AX,DATAMOV DS,AXLEA SI,SCOREMOV CX,8Al: CALLINCCOUNT SIDEC CXCMP CX,OJNZ AlMOV AH,4CHINT 21HCOUNT PROCMOV AL,[SI]CMP AL,90JNB A2CMP AL,80JNB A3CMP ALJOJNB A4CMP AL,60JNB A5INC SCOREERETA2: INC SCOREARETA3: INC SCORERRETA4: INCRETA5: INCRETCOUNT ENDP CODE ENDSEND SCOREC SCOREDSTART。

“汇编语言与微机原理”课程教学中汇编子程序实验设计

“汇编语言与微机原理”课程教学中汇编子程序实验设计

5 8 ・
Co mp u t e r Er a No. 2 2 01 3
“ 汇 编语言与 微机原理’ ’ 课 程教学中 汇编子 程序实 验设计
赵 永标 。张 其林 ,詹 彬 ,康长 青
( 湖北文理学院数学与计算机科学学院,湖北 襄阳 4 4 1 0 5 3 )
摘 要 :“ 汇编语 言与微 机原理” 是 计算机科 学与技术 专业 的必修基 础课 程。在教 学中汇编语 言子程序 实验设计普遍存
关键词 :汇编语言 ;子程序 ;宏 ;中断 ;实验设计 中图分类号 : G6 4 2 文献标志码 : B 文章 编号 : 1 0 0 6 — 8 2 2 8 ( 2 0 1 3 ) 0 2 — 5 8 — 0 2
Ex p e r i me n t a l d e s i g n o f a s s e mb l y s u b — r o u t i n e s i n “ a s s e mb l y l a n g u a g e a n d mi c r o c o mp u t e r p r i n c i p l e ’ ’
Z h a o Y o n g b i a o ,Z h a n g Qi l i n ,Z h a n Bi n ,Ka n g C h a n g q i n g
( S c h o o l o f M a t h e m a t i c s a n d C o m p u t e r S c i e n c e , H u b e i U n i v e r s i t y f o A r t a n d S c i e n c e , X i a n g y a n g , H u b e i 4 4 1 0 5 3 ,C h i n a )

微机原理4_2

微机原理4_2

Y
P1
标号1:
N Y P2
条件2成立 ?
标号2:

N
条件n成立 ?
Y
Pn
标号n:
N
Pn+1
标号n+Βιβλιοθήκη :TEST/CMP指令(测试条件1) Jx 标号1 ;不满足转标号1 处理体P1… JMP 标号n+1 标号1:TEST/CMP指令(测试条件2) Jx 标号2 ;不满足转标号2 处理体P2… JMP 标号n+1 标号2:TEST/CMP指令(测试条件3) Jx 标号3 ;不满足转标号3 处理体P3… JMP 标号n+1 标号3:TEST/CMP指令(测试条件4) … … 标号n+1:(公共出口)
Y
Z <= 1
结束
EXT:
MOV Z, AL RET
30
程 序 ;-- 数据段定义 ---------------------------------SEGMENT X DB 242 Y DB 67 Z DB ? DAT ENDS ;-- 代码段定义 ---------------------------------COD SEGMENT ASSUME DS: DAT, CS: COD MAIN PROC FAR PUSH DS ; 保存返回地址 SUB AX, AX PUSH AX MOV AX, DAT MOV DS, AX ; 初始化DS
3.源程序的基本结构:顺序、分支、循环、过程
14
如何绘制程序框图(流程图)?
(1)用方框表示工作框,框中用简明语言 标明要完成的功能
(2) 用菱形框表示判断框
?
Y
15
N
框中标明比较、判断和条件

微型计算机原理及接口技术ch10-子程序设计

微型计算机原理及接口技术ch10-子程序设计

第6章子程序设计为什么用子程序? UML中的设计模式?6.1.子程序结构主程序与子程序间的关系6.1.1子程序的定义过程名PROC 属性...RET/RETF[过程名] ENDP属性: NEAR, FAR1.主程序与子程序在同一代码段内例 6.1.1CODE SEGMENTMAIN PROC FAR…CALL SUB1…RETMAIN ENDPSUB1 PROC NEAR…CALL SUB2…RETSUB1 ENDPSUB2 PROC NEAR…RETSUB2 ENDP…CODE ENDSEND MAIN2.主程序与子程序不在同一个代码段例6.1.2CODE1 SEGMENTMAIN1 PROC FAR……CALL SUB3…MAIN1 ENDPSUB3 PROC FAR…RETSUB3 ENDPCODE1 ENDSCODE2 SEGMENTMAIN2 PROC FAR…CALL SUB3…MAIN2 ENDPCODE2 ENDSEND MAIN16.1.2子程序的调用和返回CALL RET 对堆栈的使用。

CALL RETF6.1.3现场的保存与恢复为什么要保存现场与恢复现场?1.利用栈指令进行现场的保存与恢复例6.1.3SUB4 PROC NEARPUSH AXPUSH BXPUSH CX…子程序体POP CXPOP BXPOP AXRETSUB4 ENDP**注意保存与恢复的顺序.2.利用数据传送指令进行现场的保存与恢复DATA SEGMENTBUFFER DW 4 DUP(?) DATA ENDSSUB5 PROC NEARLEA DI, BUFFERMOV [DI], AXMOV [DI+2], BXMOV [DI+4], CXMov [DI+6], DX…子程序体LEA DI, BUFFERMOV AX, [DI]MOV BX, [DI+2]MOV CX, [DI+4]MOV DX, [DI+6]RETSUB5 ENDP**现场保存在子程序的数据空间.**有什么问题? DI?3.利用PUSHA和POPA进行现场的保存与恢复(286以上)SUB6 PROC NEARPUSHA…子程序体POPARETSUB6 ENDP4.利用PUSHAD和POPAD指令进行现场的保存与恢复(386以上)SUB7 PROC NEARPUSHAD…子程序体POPADRETSUB7 ENDP**保存的原则:子程序使用的寄存器,这些寄存器要保存与恢复.6.1.4子程序的参数传送传送参数方法: 通过通用寄存器(R C); 通过存储单元; 通过堆栈1.通过通用寄存器传送参数例6.1.7 用寄存器传送参数方式, 编制5位10进制加法程序。

微机原理软件实验报告

微机原理软件实验报告

实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。

2. 掌握汇编语言程序设计的基本方法。

3. 通过实验,加深对微机原理的理解。

二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。

2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。

四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。

微机原理第八章微型计算机的程序设计

微机原理第八章微型计算机的程序设计

0000 0000 0000 0001 0000 0010
7
1. BCD数加法调整指令DAA和AAA (P196)


DAA-----两个压缩BCD数相加调整指令: (AL&0FH)>9或者AF=1,则AL加6; (AL&0F0H)>90H或CF=1,则AL加60H; 如:MOV AX,3456H
二进制编码的十进制数 就是BCD码(Binary Coded Decimal)。
6
两种BCD码的编码对照表
十进制数 0 1 2 3 … 9 10 11 12

压缩 BCD 码 0000 0001 0010 0011 … 1001 0001 0000 0001 0001 0001 0010

非压缩 BCD 码 0000 0000 0000 0001 0000 0010 0000 0011 … 0000 1001 0000 0001 0000 0001 0000 0001
11
例8.2 非压缩BCD数W1与W2(均为字变量)相加, 将其和送到SUM字节变量中。
• • • • data segment W1 DW 0809H ;即89D W2 DW 0607H ;即67D SUM DB 3 DUP(0)
• ;一个字节放1位BCD码,用来放加完后的值156 • data ends
• ADD AL,AH ; AL=0EH, AH=08H(没变) • MOV AH,0 • AAA ;属于第1种情况,故AL为(AL+6) &0F=14H&0FH=04H; AH=01H
9

【例8.1】的程序段为:
• • • • • • • • • stack segment stack ‘stack dw 32 dup(0) stack stack ends data segment W1 DW 8931H W2 DW 5678H SUM DB 3 DUP(0) data ends code segment

微机原理与接口技术-六章-程序设计

微机原理与接口技术-六章-程序设计

PROC MOV SAL SAL ADD MOV
NEAR AL,CL AL,1 AL,1 AL,CL CL,AL
RET DP5 ENDP MY ENDS END START AL=? BL=? CL=?
微机原理与接口技术
例: 累加数组中的元素。
主程序 data segment ary dw 1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw ? data ends code segment main proc far assume cs:code, ds:data start: push ds sub ax, ax push ax mov ax, data mov ds, ax call proadd ret main endp
④内存分配
微机原理与接口技术
6.3 分支程序(1)
条件满足? N 语句系列
Y
N
Y 条件满足? 语句系列2
语句系列1
两种分支结构示意图 例:编一个程序。从外设71H取一个数M,判断其值是否在10和 20之间,即10≤M<20。如果M≥20,则送0FFH给外设73H; 如果M<10,则送00H给外设73H;如果10≤M<20, 则送88H给外设73H。
Y
判断
N
处理
结束
微机原理与接口技术
6.2 简单程序(1)
例:将内存单元10050H的内容拆成两段,每段4位,分别存 入10051H(低4位)和10052H(高4位)单元。即 10051H和10052H单元的高4位都为0。
①分析: 理解题意,假设10050H单元的 内容是6CH,题意是把它分成 06H和0CH,分别存入10051H 和10052H单元中。 ②确定算法: 可以通过移位指令,也可以用 逻辑与运算指令(与0FH)。

微机原理软件实验报告

微机原理软件实验报告

信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期:2011年12月实验一DEBUG的使用 (1)一、实验目的 (1)二、实验内容 (1)三、预习思考 (3)四、实验过程 (4)五、实验总结 (9)实验二分支、循环程序设计 (10)一、实验目的 (10)二、实验内容 (10)三、预习思考 (10)四、实验过程 (10)(一)、流程图 (11)(二)、源代码 (11)(三)、实验分析 (11)五、实验总结 (14)实验三代码转换程序设计 (15)一、实验目的 (15)二、实验内容 (15)三、预习思考 (15)四、实验过程 (16)(一)流程图 (16)(二)模块层次图 (16)(三)源代码 (17)(四)实验分析 (21)五、实验总结 (22)实验四子程序设计 (23)一、实验目的 (23)二、实验内容 (23)三、预习思考 (23)四、实验过程 (24)(一)流程图 (24)(二)模块层次图 (25)(三)源代码 (25)(四)实验分析 (34)五、实验总结 (35)实验五中断程序设计 (37)一、实验目的 (37)二、实验内容 (37)三、预习思考 (37)四、实验过程 (38)(一)流程图 (38)(二)源代码 (39)(三)实验分析 (45)五、实验总结 (46)实验一 DEBUG 的使用一、实验目的1.掌握汇编程序的编辑、编译、连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法。

二、实验内容1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20B DB 15Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件。

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

实验三子程序设计
1、实验目的:
(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。

(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。

(3)子程序设计
2.实验步骤:
(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。

(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。

(扩展名为OBJ)
(3)用连接程序TLINK连接目标代码文件,形成可执行文件。

(扩展名为EXE)
(4)运行可执行文件。

观察执行结果,以验证其正确性。

3.实验内容:
(1)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其升序后的结果。

.model small
.stack 256
.data
count=5
array dw count dup (?)
in_message db "please enter data:$"
out_message db "sort result is :$"
.code
.startup
mov ah,9
lea dx,in_message
int 21h
mov cx,count
mov si,offset array
again: call read ;输入count数据存入array数组中
call dpcrlf
mov [si],bx
inc si
inc si
loop again
mov cx,count ;排序(升序)
dec cx
again2: lea si,array
mov di,cx
again1: mov ax,[si]
cmp ax,[si+2]
jle next1
xchg ax,[si+2]
xchg ax,[si]
next1: add si,2
loop again1
mov cx,di
loop again2
mov ah,9
lea dx,out_message
int 21h
mov cx,count ;输出(升序)
lea si,array
again3: mov bx,[si]
call write
call dpcrlf
inc si
inc si
loop again3
mov ax,4c00h
int 21h
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
END
(2)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其降序后的结果。

.model small
.stack 256
.data
count=5
array dw count dup (?)
in_message db "please enter data:$"
out_message db "sort result is :$"
.code
.startup
mov ah,9
lea dx,in_message
int 21h
mov cx,count
mov si,offset array
again: call read ;输入count数据存入array数组中
call dpcrlf
mov [si],bx
inc si
inc si
loop again
mov cx,count ;排序(降序)
dec cx
again2: lea si,array
mov di,cx
again1: mov ax,[si]
cmp ax,[si+2]
jge next1
xchg ax,[si+2]
xchg ax,[si]
next1: add si,2
loop again1
mov cx,di
loop again2
mov ah,9
lea dx,out_message
int 21h
mov cx,count ;输出(降序)
lea si,array
again3: mov bx,[si]
call write
call dpcrlf
inc si
inc si
loop again3
mov ax,4c00h
int 21h
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
END
(3)从键盘上输入若干个十进制数(-32767<x<32767),然后利用交换标志优化排序算法排序并输出其降序后的结果。

.model small
.stack 256
.data
count=5
array dw count dup (?)
in_message db "please enter data:$"
out_message db "sort result is :$"
.code
.startup
mov ah,9
lea dx,in_message
int 21h
mov cx,count
mov si,offset array
again: call read ;输入count数据存入array数组中 call dpcrlf
mov [si],bx
inc si
inc si
loop again
mov cx,count ;排序(降序)
dec cx
again2: lea si,array
mov di,cx
mov bx,0
again1: mov ax,[si]
cmp ax,[si+2]
jge next1
xchg ax,[si+2]
xchg ax,[si]
mov bx,-1
next1: add si,2
loop again1
mov cx,di
dec cx
cmp bx,-1
jz again2
mov ah,9
lea dx,out_message
int 21h
mov cx,count ;输出(降序)
lea si,array
again3: mov bx,[si]
call write
call dpcrlf
inc si
inc si
loop again3
mov ax,4c00h
int 21h
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
END
4、实验总结
本次微机原理与接口技术实验是子程序设计实验,通过实验,我能够熟悉汇编语言的编辑、汇编、连接、运行的全过程,了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE命令包含文件的方法,对子程序设计有了进一步理解。

本实验程序有点多,但是通过老师和同学的帮助,顺利完成实验。

实验中运行可执行文件,观察执行结果,以验证其正确性,达到了实验目的。

相关文档
最新文档