微机原理实验之子程序设计

微机原理实验之子程序设计
微机原理实验之子程序设计

子程序设计实验

一、实验目的

1.学习子程序的定义和调试方法。

2.掌握子程序、子程序的嵌套、递归子程序的结构;

3.掌握子程序的程序设计及调试方法。

二、实验设备

PC 机一台,TD-PITE 实验装置一套。

三、实验内容及步骤

1.求无符号字节序列中的最大值和最小值

设有一字节序列,其存储首地址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。程序流程图如图4-1所示。

图4-1 程序流程图

实验程序

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV AX, 0000H

MOV DS, AX

MOV SI, 3000H ; 数据区首址

MOV CX, 0008H

CALL BRANCH ; 调用子程序

HERE: JMP HERE

BRANCH PROC NEAR

JCXZ A4

PUSH SI

PUSH CX

PUSH BX

MOV BH, [SI]

MOV BL, BH

CLD

A1: LODSB

CMP AL, BH

JBE A2

MOV BH, AL

JMP A3

A2: CMP AL, BL

JAE A3

MOV BL, AL

A3: LOOP A1

MOV AX, BX

POP BX

POP CX

POP SI

A4: RET

BRANCH ENDP

CODE ENDS

END START

实验步骤:

(1)根据程序流程图编写实验程序;

(2)经编译、链接无误后装入系统;

(3)键入E3000命令,输入8个字节的数据,如:D9 07 8B C5 EB 04 9D F9;

(4)运行实验程序;

(5)点击停止按钮,停止程序运行,观察寄存器窗口中AX的值,AX应为F9 04,其中AH中为最大值,AL中为最小值;

(6)反复测试几组数据,检验程序的正确性。

程序说明:该程序使用BH和BL暂存现行的最大值和最小值,开始时初始化成首字节的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL相比较,若取出的字节内容比BH的内容大或比BL的内容小,则修改之。当循环操作结束时,将BH送AH,将BL送AL,作为返回值,同时恢复BX原先的内容。

2. 求N!

利用子程序的嵌套和子程序的递归调用,实现N!的运算。根据阶乘运算法则,可以得:N!=N(N-1)!=N(N-1)(N-2)!=……

0!=1

由此可知,欲求N的阶乘,可以用一递归子程序来实现,每次递归调用时应将调用参数减1,即求(N-1)的阶乘,并且当调用参数为0时应停止递归调用,且有0!=1,最后将每次调用的参数相乘得到最后结果。因每次递归调用时参数都送入堆栈,当N为0而程序开始返回时,应按嵌套的方式逐层取出相应的调用参数。

定义两个变量N及RESULT,RESULT中存放N!的计算结果,N在00H~08H之间取值。实验程序

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

PUBLIC N, RESULT ;设置全局变量

DA TA SEGMENT

N DB ? ;N的范围在1~8之间

RESULT DW ? ;N!的结果存于该变量中

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA

MOV DS, AX

MOV AX, OFFSET RESULT

PUSH AX

MOV AL, N

MOV AH, 00H

PUSH AX

MOV DI, 0000H

CALL branch

JMP START ;在此处设置断点,观察变量

branch: PUSH BP

MOV BP,SP

PUSH BX

PUSH AX

MOV BX,[BP+DI+06H]

MOV AX,[BP+DI+04H]

CMP AX,0000H

JZ A1

PUSH BX

DEC AX

PUSH AX

CALL branch ;递归调用

MOV BX,[BP+DI+06H]

MOV AX,[BX]

PUSH BX

MOV BX,[BP+DI+04H]

MUL BX

POP BX

JMP A2

A1: MOV AX, 0001H

A2: MOV RESULT, AX

POP AX

POP BX

POP BP

RET 0004H

CODE ENDS

END START

实验步骤

(1)依据设计思想绘制程序流程图,编写实验程序;

(2)经编译、链接无误后装入系统;

(3)将变量N及RESULT加入变量监视窗口,并修改N值,N在00~08H之间取值;(4)在JMP START语句行设置断点,然后运行程序;

(5)当程序遇到断点后停止运行,此时观察变量窗口中RESULT的值是否正确,验证程序的正确性;

(6)改变变量N的值,然后再次运行程序,当程序停止在断点行后观察实验结果。

表4-2 阶乘表

同济大学微机原理实验报告

《微机原理与接口技术》上机实验报告

《微机原理与接口技术》上机实验报告

实验报告:(包括目的、方法、原理、结果或实验小节等)。 一、实验目的 掌握简单并行接口的工作原理及使用方法。 二、实验内容 1、按下面图一简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。 3、按下面图二简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。 图一图二 三、实验中使用到的程序 对于简单并行输出接口: stack1 segment stack 'stack' dw 32 dup(0) stack1 ends data segment baseport equ 0ec00h-280h;实际基址 port equ baseport+2a8h;基址+偏移地址 data ends code segment assume ss:stack1,ds:data,cs:code start: mov ax,data mov ds,ax again: mov ah,1 int 21h

微机原理实验三子程序设计实验

实验三 子程序设计实验 一、实验目的 1.学习子程序的定义和调用方法。 2.掌握子程序的程序设计、编制及调用。 二、实验设备 TDN86/88教学实验系统一台 三、实验内容及步骤 1.求无符号字节序列中的最大值和最小值 设有一字节序列,其存储首址为3000H ,字节数为08H 。利用子程序的方法编程求出该序列中的最大值和最小值。实验程序及流程如下: 主程序 STACK1 SEGMENT STACK DW 64 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008H CALL branch A1: JMP A1 branch: JCXZ A4 PUSH SI PUSH CX PUSH BX

子程序 实验步骤 (1)输入源程序,进行编译、链接和加载。 (2)在调试区键入E0000:3000↙,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。 (3)运行程序,查看结果,在调试区键入R AX↙,显示结果应为AX=F9 04,AH中为最大值,AL中为最小值。 2.数组求和 设有一字节序列(存储地址和字节数可自定义),编写程序,求出该序列的和,求和工MOV BH,[SI] MOV BL,BH A1: LODSB CMP AL,BH JBE A2 MOV BH,AL JMP A3 A2: CMP AL,BL JAE A3 MOV BL,AL A3: LOOP A1 MOV AX,BX POP BX POP CX POP SI A4: RET CODE ENDS END START

微机原理实验 源程序

《微机原理及接口技术》 实验指导书 杨霞周林英编 长安大学电子与控制工程学院 2009年9月

前言 本实验指导是为适应各大、中专院校开设微机原理及应用方面的课程需做大量软硬件实验的需要而编写的,供学生编程用。完成本实验指导中的实验,可使学生基本掌握8086/8088的结构原理、接口技术、程序设计技巧。手册中详细叙述了各实验的目的、内容,列出了接线图、程序框图和实验步骤。 主要学习内容为80X86语言实验环境配置、汇编源语言格式、输出字符、循环结构、子程序调用,以及加减乘除等指令操作、通用接口芯片的接口编程与使用。所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据教学要求,选择相应实验。学习结束后,要求学生能够独立编写出综合加减乘除等指令,以及循环结构、子程序调用等程序控制程序、看懂一般接口芯片电路图。

目录 实验一清零程序 (4) 实验二拆字程序 (6) 实验三数据区移动 (8) 实验四多分支程序设计 (10) 实验五多字节减法运算 (13) 实验六显示程序 (16) 实验七 8251串口实验 (20) 实验八步进电机控制 (26) 附录一汇编语言的存储模型 (36) 附录二 8279键值显示程序 (37)

实验一清零程序 一、实验目的 掌握8088汇编语言程序设计和调试方法。 二、实验设备 STAR系列实验仪一套、PC机一台。 三、实验内容 把RAM区内4000H-40FFH单元的内容清零。 四、程序框图 五、源程序清单 .MODEL TINY .STACK 100 .DATA .CODE ORG 0100H START: MOV BX,4000H MOV AX,0000H MOV CX,80H L1: MOV [BX],AX INC BX INC BX LOOP L1 JMP $ END START 六、实验步骤

微机原理与接口技术实验报告

微机原理与接口技术实验报告

2

3

实验一:数据传送 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 1.学习程序设计的基本方法和技能,掌握用汇编语言设计、编写、调试和运行程序的方法; 学习用全屏幕编辑软件QEDIT.EXE建立源程序(.ASM文件); 学习用汇编软件MASM.EXE对源文件汇编产生目标文件(.OBJ文件); 学习用连接程序LINK.EXE对目标文件产生可执行文件(.EXE文件); 学习用调试软件TD.EXE调试可执行文件; 2.掌握各种寻址方法以及简单指令的执行过程。 二.实验器材 PC机 三.实验组织运行要求 1.利用堆栈实现AX的内容与BX的内容进行交换。堆栈指针SP=2000H,AX=3000H,BX=5000H; 2.汇编、调试、观察、记录结果; ⑴用QEDIT.EXE软件输入汇编语言源程序,以.ASM格式文件存盘; ⑵用MASM对源程序进行汇编产生二进制目标文件(.OBJ文件),再用连接程序LINK产生可执行文件(.EXE文件); ⑶用调试软件TD调试、运行程序,观察、记录结果。 四.实验步骤 1.进入子目录E:>\SY86后,利用QEDIT.EXE(简称Q)送入以下汇编语言源程序,并以M1.ASM文件存盘 ⑴汇编语言程序的上机过程 ①进入\SY86子目录 E:>CD\SY86 E:\SY86> ②进入QEDIT.EXE 编辑界面 E:\SY86> Q ③输入文件名*.ASM(如M1.ASM)后,输入源程序 源程序 DATA SEGMENT PARA PUBLIC’DATA’ ;数据段定义 DB 512 DUP(0) DATA ENDS STACK SEGMENT PARA STACK’STACK’ ;堆栈段定义 DB 512 DUP( ?) 4

微机原理子程序设计

实验三子程序设计 1、实验目的: (1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。 (2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。 (3)子程序设计 2.实验步骤: (1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。 (2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。 (扩展名为OBJ) (3)用连接程序TLINK连接目标代码文件,形成可执行文件。(扩展名为EXE) (4)运行可执行文件。观察执行结果,以验证其正确性。 3.实验内容: (1)从键盘上输入若干个十进制数(-32767

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

微机原理及应用实验(题目)

微机原理及应用实验 实验一开发环境的使用 一、实验目的 掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。二、实验内容 在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的 30H~7FH 单元清零。 三、实验设备 PC机一台。 四、实验步骤 用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。五、实验思考 1.如果需把30H-7FH 的内容改为55H,如何修改程序? 2.如何把128B的用户RAM全部清零? 六、程序清单 文件名称:CLEAR.ASM ORG 0000H CLEAR: MOV R0,#30H ;30H 送R0寄存器 MOV R6,#50H ;50H 送R6寄存器(用作计数器) CLR1: MOV A,#00H ;00 送累加器A MOV @R0,A ;00 送到30H-7FH 单元 INC R0 ;R0 加1 DJNZ R6,CLR1 ;不到50H个字节,继续 WAIT: LJMP WAIT END 实验二数据传送 一、实验目的 掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。 二、实验内容 1.编制一段程序,要求程序中包含7中不同寻址方式。 2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。 3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。 4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。 三、实验设备 PC机一台。

微机原理及应用实验报告

微机原理及其应用上机实验报告 实验一 程序调试实验(顺序结构程序设计) 一、实验目的: 1.学习及掌握汇编语言源程序的基本结构,明确程序中各段的功能和相互之间的关系。 2.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。 3、熟悉和掌握DEBUG 常用命令的使用 二、实验要求: 1、上机前,要认真阅读前言和课本相关章节 2、上机前,画好流程图,编写好程序 3、上机时,注意出现的错误,记录下出错信息,翻译之 4、完成好实验报告 三、实验内容: 在内存TAB 开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0 ≤ X ≤ 15),求X 的平方值,并把结果存放在Y 单元中。 (2).分析 X 平方的值是tab 为首地址且x 的值为有效地址中的值。 data segment x db 8 y db data ends stack segment para'stack' db 100 dup(0) stack ends code segment assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax xor ax,ax

mov al,x lea si,tab add si,ax mov al,[si] mov y,al mov ah,4ch int 21h code ends end start (3).程序调试: 4.心得体会 了解了顺序结构,掌握了程序的运行,调试。 实验二分支程序设计 一、实验目的: 熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法。掌握分支程序设计、编写、调试和运行的方法。 二、实验要求: 1、上机前认真分析题意,找出算法,画出流程图,依据流程图,编好程序。 2、认真调试程序,对程序可能存在的所有分支都要进行运行,只有这样才能证明程序的正确性。 二、实验内容

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

微机原理课程设计报告-数字时钟的实现(附代码)

合肥工业大学 计算机与信息学院 课程设计 课程:微机原理与接口技术设计专业班级:计算机科学与技术x班学号: 姓名:

一、设计题目及要求: 【课题6】数字时钟 1.通过8253 定时器作产生秒脉冲定时中断。在中断服务程序中实现秒、分、小时的进位(24小时制)。 2.在七段数码管上显示当前的时分秒(例如,12 点10 分40 秒显示为121040)。 3.按“C”可设置时钟的时间当前值(对准时间)。 二、设计思想: 总体思想: 1、功能概述: 实验箱连线: 本实验建立在Dais实验箱基础上完成的基本连线及程序如下: 138译码器: A,B,C,D,分别连接A2,A3,A4,GS; y0连接8253的CS片选信号; y1连接8259的CS片选信号; 8253连线: 分频信号T2接8253的CLK0; 8253的OUT0接8259的IR7; 8253的gate信号接+5V; 8259连线: 8259的数据线接入数据总线;

本程序包括显示模块,键盘扫描模块,时间计数模块,设置模块等几个模块, (1)程序运行后,LED显示000000初始值,并且开始计数 (2)按C键进行设置初始时间,考虑到第一个数只能是0,1,2,当第一个数显示2时第二个数只能显示0~4,同理下面各位应满足时钟数值的合理的取值; (3)在手动输入初始值时,按D键进行回退1位修改已设置值,连续按D键可以全部进行删除修改。 2、主程序设计 主程序中完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259一个刺激,当8259接受到刺激后会给CPU一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成时间计数加,即完成电子表的整体设计。详细流程图见图三-1。 3、LED显示子程序设计 本程序显示部分用了6个共阳极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。 4、键盘扫描子程序设计 本程序需要用键盘对时间的初始值进行设置,因此对键盘扫描的子程序需要满足的功能如下: 判断是否是C键,若不是就返回至主程序,若是C键就开始对时间初始值进行设置,同时因注意到第一个值不可以超过2,第一个数是2时第二数不能超过4,余下的同理要满足时间数值的取值范围呢,若不是合法输入不予反应继续等待输入。当遇到输入数值错误时可以按下D键进行删除一位重新设置;当6位初始值全部设置成功后,电子表将自动开始走表。 5、时间运算子程序设计 该子程序的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟

微机原理实验报告

微机原理 实验报告 学校:湖北文理学院、班级:电子1413 姓名:杨仕浩 学号:2014111347 指导老师:吉向东

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 四、实验程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?)

TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL A DDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: M OV AL,[SI] MOV BL,[DI] ADC AL,BL AAA MOV [SI],AL DEC SI DEC DI LOOP AD2 MOV SI,DX MOV DI,BP MOV BX,05H AD3: ADD BYTE PTR [SI],30H ADD BYTE PTR [DI],30H DEC SI

8086软硬件实验报告(微机原理与接口技术上机实验)

实验一实验环境熟悉与简单程序设计 实验目的 (1)掌握DEBUG调试程序的使用方法。 (2)掌握简单程序的设计方法。 实验内容 编程将BH中的数分成高半字节和低半字节两部分,把其中的高半字节放到DH中的低4位(高4位补零),把其中的低半字节放到DL中的低4位(高4位补零)。如: BH=10110010B 则运行程序后 DH=00001011B DL=00000010B 实验准备 (1)熟练掌握所学过的指令。 (2)根据实验内容,要求预先编好程序。 实验步骤 (1)利用DEBUG程序输入、调试程序。 (2)按下表要求不断地修改BH的内容,然后记录下DX的内容。 实验报告 (1)给出程序清单。 (2)详细说明程序调试过程。

程序: CODE SEGMENT START : MOV BH,00111111B MOV AL,BH MOV CL,4 SHR AL,CL MOV DH,AL MOV AL,BH AND AL,00001111B MOV DL,AL MOV CL,0 CODE ENDS END START

实验二简单程序设计 实验目的 (3)掌握DEBUG调试程序的使用方法。 (4)掌握简单程序的设计方法。 实验内容 试编写一个汇编语言程序,要求实现功能:在屏幕上显示:Hello world My name is Li Jianguo 参考程序如下:(有错) data segment out1 db 'Hello world' ax db 'My name is Li Jianguo' data ens code segment assume cs:code;ds:data lea dx,out1 mov ah,2 int 21h mov dl,0ah mov ah,2

微机原理与接口技术汇编子程序涉及

试验五汇编子程序设计 一、试验目的 (1)掌握汇编子程序设计的一般方法; (2)掌握汇编子程序的调试方法; (3)掌握递归子程序设计与调试方法。 二、输入输出子程序 1、十进制数输入子程序decibin 子程序名:decibin 子程序功能:用户输入十进制数放在BX中 入口参数:无 出口参数:BX存放输入的十进制数 受影响的寄存器:AX、BX、CX、DX和标志寄存器 注意:①用户输入字符‘0’~‘9’,当输入非法字符时结束输入,如回车; ②十进制数位数可以是1位、2位等,范围0~65535。 decibin proc near mov bx , 0 newchar: mov ah , 1 int 21h mov dl , al sub al , 30h jl exit1 cmp al , 9 jg exit1 cbw xchg ax , bx mov cx , 10 mul cx xchg ax , bx add bx , ax jmp newchar exit1: ret decibin endp 2、十六进制数输入子程序hexibin 子程序名:hexibin

子程序功能:用户输入十六进制数放在BX中 入口参数:无 出口参数:bx存放输入的十六进制数 受影响的寄存器:ax、bx、cx和标志寄存器 注意:①用户输入0ah~0fh的数字时,输入大写字母‘A’~‘F’,小写字母‘a’~‘f’无效; ②子程序不能控制数的位数可能0位、1位、2位……等位数,如果输入位数大于4位,则以最新的4位十六进制数为准; ③输入字符可以按回车结束,当输入任何非法字符时也能结束数据输入。 hexibin proc near mov bx , 0 newchar: mov ah , 1 int 21h sub al , 30h jl exit cmp al , 10 jl add_to sub al , 7 cmp al , 0ah jl exit cmp al , 10h jge exit add_to: mov cl , 4 shl bx , cl mov ah , 0 add bx , ax jmp newchar exit: ret hexibin endp 3、十进制数显示子程序binidec 子程序名:binidec 子程序功能:将bx寄存器存放的数以十进制的形式显示出来 入口参数:bx存放要显示的数 出口参数:无 受影响的寄存器:ax、bx、cx、dx和标志寄存器

微机原理实验报告软件实验1-4

微机原理实验报告 学院:算机科学与软件教育学院 1. 掌握存储器读写方法 2. 了解存储器的块操作方法 二、实验原理 存储器读写和块操作 三、实验设备仪器及材料 计算机,WA VE 6000软件 四、实验过程 S1.asm 代码流程图 data segment Block db 256 dup(55h) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov bx, offset Block ; 起始地址 mov cx, 256 ; 清256 字节Again: mov [bx], byte ptr 0 inc bx ; 地址+1 Loop Again ; 记数减一jmp $ ;死循环code ends end start

五、实验步骤 (1) 进入Wave6000,输入程序并检查,保存程序。 (2) “编译”程序。 (3) “全速执行”程序。 (4) “暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。 (5) 在指令“jmp $”处设断点。“全速执行”程序。 (6) 在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。 六、实验结果及总结 运行前:运行后: 2、调试:如何将存储器块的内容置成某固定值(例全填充为0FFH)? 总结:通过本实验,我了解到单片机读写存储器的读写方法,同时也了解到单片机编程,调试方法。学会内存的移动方法,也加深对存储器读写的认识。

微机原理实验报告 学院:算机科学与软件教育学院 实验 课程 名 微机原理实验成绩实验 项目名称实验二、二进制到BCD码转换 指导老 师 1. 了解BCD值和ASCII值的区别。 2. 了解如何将BCD值转换成ASCII值。 3. 了解如何查表进行数值转换及快速计算。 二、实验原理 ASCII码表 三、实验设备仪器及材料 计算机,WA VE 6000软件 data segment Result db 3 dup(?) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov ax, 123 mov cl, 100 div cl mov Result, al ; 除以 100, 得百位数 mov al, ah mov ah, 0 mov cl, 10 div cl mov Result+1, al ; 余数除以 10, 得十位数 mov Result+2, ah ; 余数为个位 数 jmp $ code ends end start 代码流程图

微机原理及应用实验报告

微机原理及应用实验报告标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

微机原理及应用实验报告 班级: 姓名: 学号: 中南大学 机电工程学院精密测控实验室

实验二软件程序设计 1.实验目的: 1、掌握MCS-51单片机指令系统及用汇编语言编程技巧; 2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。 2.实验内容: 1、编写排序程序并上机调试通过。 已知8031内部RAM60H~69H单元中,依次存放了 FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程 将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。 2.、编写多字节加法程序并上机调试通过。 8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结 果存入以20H为起始地址的区域中(低字节在前)。 3.实验设备名称、型号: 4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单: 程序1、编写排序程序并上机调试通过。 已知8031内部RAM60H~69H单元中,依次存放了 FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程 将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。

解:本设计采用冒泡排序法,使用双重循环,并在内循环中进行比较如果合乎从大到小的顺序则不动,否则两两交换,这样比较下去,比较9次 后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。如 果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列 了。则可以退出循环,结束程序。 程序结构框图和程序代码如下:

微机原理上机实验答案

实验01A 将FFFFH送到AX,BX,CX,DX,SI,DI,BP寄存器 程序如下: CODE SEGMENT ASSUME CS:CODE START PROC FAR STT:PUSH DS SUB AX,AX PUSH AX ;============================== MOV AX,0FFFFH MOV BX,AX MOV CX,AX MOV DX,AX MOV SI,AX MOV DI,AX MOV BP,AX ;============================== RET START ENDP CODE ENDS END STT 实验01B 将FFH送到内存1000H,1001H,1002H,1003H,1004H单元中程序如下: DA TA SEGMENT ORG 1000H H1 DB 5 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START PROC FAR STT:PUSH DS SUB AX,AX PUSH AX ;============================== MOV AL,0FFH MOV DI,1000H MOV CX,5 ;循环5次 LP1:MOV [DI],AL ;FF放入1000H-1004H中 INC DI

DEC CX JNZ LP1 ;============================== RET START ENDP CODE ENDS END STT 实验02A 编写一个加法程序,在数据段偏移地址1000H处开始,存放有两个3字节长的数据(高位对应高地址,低位对应低地址),求这两数据(十六进制数)的和,并将结果放在两数据之后,利用DEBUG调试程序,并求解:CCBBAAH+223344H=?CCBBAA+554433H=? 程序如下: DA TA SEGMENT ORG 1000H H1 DB 10 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START PROC FAR STT:PUSH DS SUB AX,AX PUSH AX Mov ax,dseg Mov ds,ax ;============================== MOV SI,1000H ;不带最高位进位的全加器 MOV DI,1003H MOV BX,1006H MOV CX,3 CLC AA: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL PUSHF ;保护FR,这里其实没有必要,因为INC不会产生进位 INC SI INC DI INC BX POPF LOOP AA

微机原理实验程序

实验一两个多位十进制数相减实验 一、实验要求:将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序 存放在以DATAI和DATA2为首的5个内存单元中(低位在前>,结果送回 DATAI处。 二、实验目的:1.学习数据传送和算术运算指令的用法。 2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 三、实验步骤:连好实验箱后接通电源,打开上位机软件88TE进入软件调试界面: 点击“文件\打开”文件路径为C: \88TE\cai\asm\Ruanjian\Rjexp1.asm。具体操作如图所示: b5E2RGbCAP

点击编译连接生成可执行的exe文件。 通过单步运行调试程序,打开寄存器查看其变量变化情况。 四、实验程序框图: 五、实验程序:

文件路径为C:\88TE\cai\asm\Ruanjian\Rjexp1.asm DATA SEGMENT DATA1 DB 33H,39H,31H,37H,38H 。第一个数据<作为被减数)DATA2 DB 36H,35H,30H,38H,32H 。第二个数据<作为减数)MES1 DB '-','$' MES2 DB '=','$'p1EanqFDPw Array DATA ENDS STACK SEGMENT STA DB 20 DUP(?> TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL MOV AH,09H LEA DX,MES1 INT 21H MOV SI,OFFSET DATA2 MOV BX,05 CALL DISPL MOV AH,09H LEA DX,MES2 INT 21H MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL SUBA 。减法运算 MOV SI,OFFSET DATA1 MOV BX,05 。显示结果 CALL DISPL MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H INT 21H MOV AX,4C00H INT 21H DISPL PROC NEAR 。显示子功能 DSI: MOV AH,02 MOV DL,[SI+BX-1] 。显示字符串中一字符 INT 21H

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

微机原理实验程序

硬件实验七 D/A转换实验 (2 锯齿波 --------------- ; 注意:进行本实验前, 请先装载运行 D/A 0V输出 (调基准电压程序Asm88\da_0v.asm ; 使 D/A输出端“ AOUT ” 输出电压为 0V , 再进行本实验。 CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 33F0H DAPORT EQU 0FFE0H H7: MOV DX,DAPORT MOV AL,00H P7: OUT DX,AL INC AL JMP P7 CODE ENDS END H7 串行通信 CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 35C0H ;TX=RX

H11: JMP START Z8251 EQU 0FFE1H D8251 EQU 0FFE0H COM_MOD EQU 04EH COM_COM EQU 25H ZXK EQU 0FFDCH ZWK EQU 0FFDDH LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H BUF DB ?,?,?,?,?,? START: MOV BX,4000H MOV AL,[BX] CMP AL,00H JNZ SR0 SR8251: MOV DX,Z8251 MOV AL,COM_MOD OUT DX,AL MOV AL,COM_COM OUT DX,AL MOV AL,10

北京理工大学微机原理实验报告

微机原理与接口技术 实验报告 实验内容:汇编语言程序设计实验 组别:12 姓名: 班级: 学号:

一、实验目的 1、熟悉IDE86集成开发环境的使用。 2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。 3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。 4、掌握利用汇编实现求和与求最值的方法。 5、掌握利用汇编实现数制转换的方法。 6、巩固理论知识,锻炼动手编程,独立思考的能力。 二、实验内容(具体内容) 1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。并查看前5个,前8 个数之和以及各寄存器和内存的状态。 2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及 MIN。 3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS 状态。 三、实验方法 1、设计思路 (1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。 (2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。 将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态 (3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。最后在屏幕上显示并返回DOS状态。 2程序流程图 实验一、二和三的流程图分别如图1、图2和图3所示

相关文档
最新文档