汇编语言-实验五 输入输出程序设计

合集下载

实验五 顺序、分支结构程序设计

实验五 顺序、分支结构程序设计

AX=13F8_BX=0000_CX=002FDX=0000_SP=0000_BP=0000_SI=0000_DI=0 000_ DS=13E8_ES=13E8_SS=13F8_CS=13F9_IP=0003_NV_UP_EI_PL_NZNAPO_ NC_ 13F9:0003_8ED8_ MOV_DS,AX_ 一_T_ AX=13F8_BX=0000_CX=002FDX=0000_SP=0000_BP=0000_SI=0000_DI=0 000 DS=13F8_ES=13E8SS=13F8_CS=13F9_IP=0005_NV_UP_EI_PL_NZNAPO_N C_ 13F9:0005_8B1E0000_ MOV_BX,[0000]_ DS:0000=0006_ 一 _T_ AX=13F8_BX=0006_CX=002FDX=0000_SP=0000_BP=0000_SI=0000_DI=0 000_ DS=13F8_ES=13E8SS=13F8_CS=13F9_IP=0009_NV_UP_EI_PL_NZNAPO_N C_ 13F9:0009_031E0200_ ADD_BX,[0002]_ DS:0002=0007_ 一 _T_ AX=13F8_BX=000D_CX=002F_DX=0000_SP=0000_BP=0000_SI=0000_DI= 0000_ DS=13F8_ES=13E8SS=13F8_CS=13F9_IP=000D_NV_UP_EI_PL_NZNAPO_N C_ 13F9:000D_B103_ MOV_CL,03_ 一_T_
2.分支结构 程序中出现二中选一的分支称为二路分支,三中选一的分支称为三路 分支,还有四中选一,N 中选一称为多路分支。实现分支的要素有两 点: (1)使用能影响状态标志的指令,如算术逻辑运算类指令、移位指 令和位测试指令等,将状态标志设置为能正确反映条件成立与否的状 态。 (2)使用条件转移类指令对状态位进行测试判断,确定程序如何转 移,形成分支。 实验内容与步骤 1. 已知字节变量 X,Y 存放于 VARX,VARY 存储单元中, 利用公式 求 Z的值,并将结果存放于 RESULT 存储单元中。公式:Z=((X+Y)*8-X)/2 。 参考程序如下:(程序名:SY5-1.ASM) data SEGMENT varx DW 0006h vary DW 0007h result DW ? data ENDS code SEGMENT ASSUME CS:code,DS:data start: MOV AX,data MOV DS,AX

汇编语言程序设计:_基本输入输出程序-精

汇编语言程序设计:_基本输入输出程序-精
第四讲 基本输入/输出程序
1. 键盘输入程序设计 2. 显示输出程序设计 3. 指令学习 4. 本讲小结 5. 作业
1、键盘输入程序
键盘输入方法
使用DOS功能调用 INT 21h
AH=01
键盘输入并回显
从标准输入设备读取字符,带回显,字符的ASCII码存放在AL.如果键 盘缓冲区没有字符,将等待输入。
如何知道 b = ?
mov ah,1 int 21h mov dl,al int 20h
程序2 (无回显)
mov ah,7 int 21h mov dl,al int 20h
键盘输入示例2
将键盘输入的一个一位数保存在DL寄存器中 程序1
mov ah,1 int 21h sub al,‘0’ ;数字0的ASCII码 30H mov dl,al int 20h
mov ch,al
; 输入的第2个数据存放在ch中
mov dl,cl
add dl,ch
int 20h
键盘输入示例4
接受键盘输入的一个两位正整数,保存在DL寄存器中
思考
两位正整数的输入假设是xy(x为十位数,y为个位数)
使用键盘输入首先接收到的是x,然后是y
在DL中要保存的是使用x和y计算出的数
怎样计算 ?
开始
输入 AL 计算ALALx2
输出AL的值 结束
显示输出示例1(程序调试)
该程序有错误!
跟踪后发现什么?
错误原因
使用DOS功能调用 INT 21h AH=2 将字符输出到标准输出设备,显示字符的ASCII码存放在DL中。 显示后 AL = DL
程序2
MOV AH,1 INT 21H SUB AL,30H ADD AL,AL MOV CL,AL ;保存在cl中 MOV DL,'<' MOV AH,2 INT 21H MOV DL,CL ;从cl中取出数据 ADD DL,30H MOV AH,2 INT 21H MOV DL,'>' MOV AH,2 INT 21H INT 20H

《汇编语言程序设计》第8章输入、输出与中断

《汇编语言程序设计》第8章输入、输出与中断

输入输出程序设计示例
读取键盘输入
通过IN指令读取键盘控制器端 口的数据,解析按键信息。
控制LED显示
通过OUT指令向LED控制端口 发送数据,控制LED的亮灭和闪 烁。
串行通信程序设计
通过IN和OUT指令实现串行数 据的发送和接收,需要设置串 行通信参数和端口地址。
并行通信程序设计
通过IN和OUT指令实现并行数 据的传输,需要设置并行通信
改进方向
进一步加强汇编语言编程和调试技能的学习和实践,提高代码质量和效率。同时,探索更多的输入输出和中断应 用场景,拓展知识面和应用能力。
THANKS FOR WATCHING
感谢您的观看
CPU在执行输入输出指令时,可能需要等待外部设备的响应,此时CPU 可以转而执行其他任务,直到收到外部设备的中断请求后再继续执行输 入输出操作。
02 输入输出指令及编程方法
输入输出指令介绍
1 2
IN指令
从端口读取数据到累加器中,可用于读取外设状 态或数据。
OUT指令
将累加器中的数据输出到端口,可用于控制外设 或发送数据。
04 输入输出与中断控制芯片 介绍
典型输入输出控制芯片
01
02
03
8255芯片
具有三个8位并行I/O端口, 可通过编程控制各端口的 工作模式和数据传输方向。
8253芯片
可编程定时/计数器,可生 成定时中断或计数中断, 常用于控制外部设备的定 时操作。
串行通信接口芯片
如8250等,实现串行数据 的传输和控制,常用于与 其他设备的串行通信。
3
端口寻址方式
直接寻址和间接寻址,直接寻址指定端口地址, 间接寻址通过DX寄存器间接指定端口地址。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。

在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

以下是我们的实验报告。

正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。

微处理器使用的是PCB-512主板,而高级汇编语言是MASM。

2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。

我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。

3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。

(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。

(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。

(4)了解8086微处理器的结构和原理。

4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。

我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。

5. 实验结果在我们的实验中,我们成功完成了上述两个程序。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

北京理工大学汇编实验五实验报告概要

北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

汇编语言程序设计实验指导

汇编语言程序设计实验指导

汇编语言程序设计实验指导【实验提要】以下列举的10个实验,都是以Intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具MASM6. X以及调试工具DEBUG或DEBUG32,针对本教材所述内容进行相关的上机实践。

旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。

(带*号的为选作内容)实验一调试工具DEBUG的应用实验目的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;2、DEBUG命令: A,D,E,F,H,R,T,U的使用;3、BCD码、ASCII码及用十六进制数表示二进制码的方法;4、寄存器: AX,BX,CX,DX,FLAGS,IP。

内容及步骤注:本次实验可以参照教材上关于DEBUG的叙述内容进行。

一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。

2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。

注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。

3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。

4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。

5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。

6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。

汇编语言-实验五 输入输出程序设计

汇编语言-实验五   输入输出程序设计

实验五输入输出程序设计一、实验目的1) 掌握输入输出程序的编写方法。

2) 熟悉系统功能调用的方法。

3) 熟悉动画程序的编写方法。

二、实验内容1)在CRT上每隔一秒连续显示字符0-9。

编程提示为了使输出的字符之间有空格,在每一个循环中输出一个0-9的字符和一个空格。

为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。

为了保证输出是十进制,增量后用DAA调整指令。

由于输出为一位十进制数,用AND 0FH 指令屏蔽高4位。

2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。

3)编制在屏幕上画线的子程序,调用该子程序画一矩形。

4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。

5)创建一磁盘文件,保存从键盘输入的字符串。

6)编写程序用设置系统时间,首先从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。

7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。

8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。

三、源程序EXAM5-1STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART:MOV BL,0LP:MOV DL,20HMOV AH, 2INT 21HMOV AL,BLADD AL, 0DAAAND AL,0FHMOV BL,ALPUSH BXOR AL,30HMOV DL,ALMOV AH, 2INT 21HMOV BX,3E8HLP2:MOV CX,176H ;延时1msLP1:PUSHFPOPFLOOP LP1DEC BXJNZ LP2POP BXINC BLJMP LPCODE ENDSEND START执行程序EXAM5-1·EXE,屏幕上依次循环显示一个数字一个空格:0 1 2 3 4 5 6 7 8 9 ……EXAM5-2STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDA TA SEGMENTBUFF DB 6,7 DUP(?),‘$’DA TA ENDSINPUT MACRO BUFEMOV DX,OFFSET BUFEMOV AH,0AHINT 21HENDMPUTCHAR MACRO CHARMOV DL,CHARMOV AH,02HINT 21HENDMCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK START:MOV AX,DA TAMOV DS,AXINPUT BUFF ;读取字符串➝BUFFPUTCHAR 0DHPUTCHAR 0AH ;光标另起一行MOV CX,0003HNEXT:PUTCHAR 2AHLOOP NEXTMOV CL,BUFF+1SUB CH,CHMOV BX,OFFSET BUFF+2BEGIN:MOV AL,[BX]PUTCHAR ALINC BXLOOP BEGINMOV CX,0003HNEXT1:PUTCHAR 2AHLOOP NEXT1MOV AH,4CHINT 21HCODE ENDSEND START执行程序EXAM5-2·EXE,输入HELLO↙屏幕上显示结果:*** HELLO ***EXAM5-5NAME EXAM6SSTACK SEGMENT STACK ’stack’DB 1024 DUP(?)SSTACK ENDSDATA SEGMENTASKNAME DB 0DH,0AH,’Enter the’DB ’dest file name:$’ASKCONT DB 0DH,0AH,’Enter the string’DB ’as file content:’0dh,0ah,’$’ FILEBUF DB 62,63DUP(?)HAND_D DW?MSGMER DB 0DH,0AH,0AHDB ’Directory full’,0DH,0AH,’$’MSGWER DB 0DH,0AH,0AHDB ’Disk full’,0DH,0AH,’$’MSGSUC DB 0DH,0AH,0AH,DB ’Write file is Successful’DB 0DH,0AH,’$’DATA ENDSDISPLY MACRO TEXTMOV DX,OFFSET TEXTMOV AH,09HINT 21HENDMCRHAND MACRO PATH,ATTRMOV DX,OFFSET PATH ;文件名MOV CL,ATTR ;文件属性XOR CH,CHMOV AH,3CHINT 21HENDMWRHAND MACRO HAND,BUFF,BYTEMOV BX,HANDMOV DX,OFFSET BUFFADD DX,2MOV CL,BYTEXOR CH,CHMOV AH,40HINT 21HENDMCLHAND MACRO HANDMOV BX,HANDMOV AH,3EHINT 21HENDMCODE SEGMENTPROG PROC FARASSUME CS:CODE,DS:DATA,SS:SSTACKPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXDISPLY ASKNAME ;提示输入文件名MOV DX,OFFSET FILEBUFMOV AH,0AHINT 21HMOV DI,OFFSET FILEBUF[2]MOV BL,FILEBUF[1]XOR BH,BHMOV BYTE PTR[BX][DI],00HCRHAND FILEBUF[2],0 ;创建并打开新文件JC CRTERRMOV HAND_D,AX ;存文件句柄DISPLY ASKCONT ;提示键入文件内容MOV DX,OFFSET FILEBUFMOV AH,0AHINT 21HWRHAND HAND_D,FILEBUF,FILEBUF[1]JC WRITERRCLHAND HAND_DDISPLY MSGSUCJMP EXIT CRTERR:DISPLY MSGMERJMP EXIT WRITERR:DISPLY MSGWER EXIT:RETPROG ENDPCODE ENDSEND PROG。

实验五 输入与输出程序设计

实验五 输入与输出程序设计

《微型计算机原理》设计性实验指导书实验六输入与输出程序设计一、实验目的1.掌握常用DOS中断调用的功能以及在应用程序中的使用方法。

2.学习键盘输入和屏幕输出的基本方法。

3.宏指令、子程序在应用程序中的使用。

4.汇编语言程序设计的调试与完善。

二、设计指标与实验要求1.设计内容本实验要求设计完成:①屏幕输出提示(如“Want input(Y/N)?”),若键入N 则结束程序返回操作系统;键入Y则转2步;键入的是其它字母则回①步。

②换行后输出提示(如“please input a strings:”),且在该提示后键入一字符串(输入到输入缓冲区)。

③换行后输出提示(如“your inputting is:”),在该提示后输出由②步输入的字符串。

④换行后输出提示“Want continue(Y/N)? ”,若键入Y则转②步;键入N则结束程序返回操作系统;其它字母则回第④步。

2.设计要求①按屏幕提示要求输入,从屏幕上获得正确结果。

②把程序中常用的中断调用定义成宏指令(至少定义2个)。

③字符串回显部分设计成子程序,可以选择用21H中断的2号或9号功能来实现,应能显示由主程序指定的任一字符串。

要注意这两种方法实现的设计过程是不同的。

采用2号功能的,子程序输入参数为“回显字符串地址”和“回显字符数”;采用9号功能的,子程序输入参数为“回显字符串地址”。

④屏幕的提示信息显示格式尽量做到兼顾美观。

3.实验步骤①.选用合适的程序文本编辑软件编辑源程序,并为文件取以.ASM为扩展名的文件存盘。

②.用宏汇编软件MASM对源程序文件进行汇编,若有错误,根据提示(行号,错误类型)回源程序文件中修改。

③.用LINK对由MASM汇编后产生的目标文件做连接,生成可执行文件;若有错误(同上)回步骤1修改源程序文件。

④.对存在问题的程序,用CV调试程序,检察运行结果,并调试程序。

⑤.反复验正程序的正确性。

⑥.完善、改进所设计的程序算法、功能、界面、或性能等指标。

汇编语言程序设计第8章输入输出程序设计

汇编语言程序设计第8章输入输出程序设计
20
中断命令寄存器20H
8.3.2 中断向量表 (293页)
00000 类型0的(IP) 类型0的(CS) 00004 类型1的(IP) 类型1的(CS) 中断向量—中断处理程序的入口 地址(段址):(偏址)
4*N
类型N的(IP) 类型N的(CS)
用户可利用保留的中断类型号 扩充自己需要的中断功能。
29
(4) 优先级特殊循环方式
特点:该循环方式和优先级自动循环
方式基本相同,不同点仅在于可以根 据用户要求将最低优先级赋于某一中 断源。
30
结束中断处理的方式
当某个中断源得到CPU的中断服务后,使中断
服务寄存器的相应位置1,表示CPU正在为该 中断源服务。 如果CPU正在为某个中断源服务时,此时产生 了比该中断源级别高的中断申请,CPU将暂时 中止低级别的中断服务,转到高级别的中断服 务,同时也使高级别的中断源在中断服务寄存 器的相应位置1, 所以中断服务寄存器的状态反应出当前CPU正 在为哪个中断源服务和还未完成哪个中断源的 服务,为中断优先级裁决器的裁决提供了依据。
32
(1) 中断自动结束方式 特点:中断服务寄存器的相应位清零是 由硬件自动完成的。 使用环境:中断自动结束方式只能适用 于有一块8259A,并且各级中断不会发生 嵌套的情况。
33
(2) 一般中断结束方式 特点:该方式是通过用软件方法发一中 断结束命令,使当前中断服务寄存器中 级别最高的置1位清0。 使用环境:使用一般的中断结束方式只 能应用于全嵌套方式下,而不能用于优 先级自动循环方式和优先级特殊循环方 式。因为一般中断结束方式结束的中断 是尚未处理完的级别最高的中断。若中 断级别改变,会使整个中断过程混乱。
17

用汇编语言实现程序的输入输出

用汇编语言实现程序的输入输出

摘要计算机的广泛使用与普及,使人们传统的学习、工作甚至思维方式都发生了巨大的变化,如不掌握好计算机技术,人们将无法获得有效的研究和开发手段,这将直接影响到我们自身的发展。

作为嵌入式专业的学生,毕业后我们所从事的工作将与计算机息息相关,或直接从事与本专业对口的工作,掌握好计算机的工作原理、硬件间的协同工作过程以及接口技术对于我们来说是至关重要的。

基于此,本次毕业设计采用模块化的设计方法,利用汇编语言编程实现了数据的输入、排序和输出功能。

汇编语言与机器语言几乎一一对应,与高级语言相比更具有所编程序质量较高,占用内存字节数较少,运行速度较快的优点,所以它成为了我们首选的编程语言。

该汇编程序主要实现了为用户提供不超过100个随机的两位数据的输入、大小排序及输出的功能。

用户可以用该程序处理学生成绩的排序问题,便于学生成绩管理。

此汇编程序包含三个功能模块:数据输入、数据排序、数据输出。

该设计基于汇编语言编程,处理循环、比较、排序、跳转等问题,使我们更好地掌握了中断的使用方法,DOS功能的调用以及数据的输入、输出处理方法。

同时,用汇编语言编写一个较完整的实用程序,培养了我们程序设计的基本思路,使我们更清楚地了解了程序编译、调试的过程,提高了我们的实际动手能力,增强了我们解决实际问题的自信心。

将这些简单的程序应用于实际的产品中,发挥它并不简单的作用,使我们的学习、生活、工作更丰富多彩。

关键字:学生成绩管理、汇编语言、数据的排序及输入/输出目录摘要 (1)目录 (2)引言 (3)第一章概述 (4)1.1概要设计 (4)1.1.1汇编语言简介 (4)1.1.2设计开发平台 (4)1.2需求分析 (5)1.2.1程序需求分析 (5)1.2.2程序设计思想 (5)1.2.3程序结构设计及功能 (6)第二章详细设计 (7)2.1设计分析 (7)2.1.1数据输入 (7)2.1.2数据比较排序 (9)2.1.3数据输出 (11)2.2总程序源代码 (13)2.3调试及如何解决其中的问题 (17)2.3.1输入成绩时无法结束输入 (17)2.3.2输入成绩后无法在显示屏上显示输入的结果 (17)2.3.3 输入成绩后,不能成功的输出成绩,TAB表地址出现问题 (18)2.3.4完成成绩的输入输出后接收任意键继续新的成绩输入输出 (18)2.3.5 判断数据大小交换的结束标志 (18)2.3.6美化程序的显示窗口 (18)2.4编译、连接、调试的过程 (19)2.4.1设置编译文件的路径:进入MASM611下 (19)2.4.2 运用MASM进行编译:MASM CHENGJI.ASM (19)2.4.3 编译无误后进入LINK连接部分:LINK CHENGJI.OBJ (20)2.4.4 进入DEBUG调试生成.EXE可执行文件:DEBUG CHENGJI.EXE,并用-U参数进行观察代码地址是否有误。

第4章 汇编语言程序设计 4.1 汇编语言软件开发步骤及输入_输出问题...

第4章 汇编语言程序设计 4.1 汇编语言软件开发步骤及输入_输出问题...

2.子程序的调用指令CALL 子程序的调用指令CALL 格式:CALL 子程序名 格式: 功能:调用指定的子程序。 功能:调用指定的子程序。 先把本指令的下一条指令的地址(即返回点) 先把本指令的下一条指令的地址(即返回点)压入堆栈保 再转向目标地址处执行子程序。 存,再转向目标地址处执行子程序。根据是段内调用还是段 间调用具体的执行过程又有所不同,如下: 间调用具体的执行过程又有所不同,如下: ① 段内调用 先将指令指针IP入栈保护,然后改变IP IP入栈保护 IP使之指向子程序的 先将指令指针IP入栈保护,然后改变IP使之指向子程序的 起始位置。 起始位置。 ② 段间调用 先将当前CS入栈,再将当前IP入栈,然后改变CS IP使之 CS入栈 IP入栈 CS和 先将当前CS入栈,再将当前IP入栈,然后改变CS和IP使之 指向子程序的起始位置。 指向子程序的起始位置。
4.3
分支程序设计
4.3.1 基本分支程序设计 在分支结构中,如果条件成立则完成某项操作, 在分支结构中,如果条件成立则完成某项操作,否则执行 其它操作或后续指令,其结构如图4-2所示 所示, 其它操作或后续指令,其结构如图 所示,该图同时也给 出了分支程序的二种典型结构。 出了分支程序的二种典型结构。
4.4
循环程序设计
4.4.1 循环程序的结构 循环程序是由四部分构成: 初始化部分、 循环程序是由四部分构成:①初始化部分、②循环工作部 参数调整部分、 分、③参数调整部分、④循环控制部分 循环程序通常又分两种结构,如图4 所示。 循环程序通常又分两种结构,如图4-3所示。
图4-3 循环程 序结构
3.子程序向主程序返回值的方法 子程序也可以向主程序有返回值, 元传递, 或存储单元传递,方法是子程序将返回值写入事先约定的寄 存器或存储单元中,主程序从中读取, 存器或存储单元中,主程序从中读取,就同主程序向子程序 传递入口参数一样。 传递入口参数一样。

汇编--输入输出程序设计

汇编--输入输出程序设计

一、实验目的和内容1. 掌握输入输出指令的使用;2. 上网查3相步进电机的工作原理;3. 用emu8086工具运行步进电机程序;4. 对步进电机程序进行改进,精确控制其转速。

二、实验原理及基本技术路线图(方框原理图)步进电机的工作原理:三、所用仪器、材料(设备名称、型号、规格等)1. 操作系统平台:Windows 72. 汇编环境:emu8086四、实验方法、步骤1. 打开emu8086汇编开发环境;2. 打开emu8086例子程序中的步进电机的源程序:D:\emu8086\examples\stepper_motor.asm3. 运行该程序,观察运行情况,并结合步进电机的工作原理,阅读并理解程序的执行逻辑,读懂程序中的注释;4. 尝试修改该程序,以精确控制步进电机的转速;5. 运行修改后的程序,观察运行结果,并分析;6. 记录实验过程,并完成实验报告。

五、实验过程原始记录(数据、图表、计算等)1. 打开步进电机的控制程序:2. 运行调试该程序,观察结果:3. 阅读该程序,并添加注释(下面为了保存原版程序,打开程序的一个副本进行修改):添加注释后的源代码如下:; 这是一个输出控制的例子; 它向虚拟的I/O端口输出值; 以控制步进电机; d:\emu8086\devices\stepper_motor.exe 在7号端口#start=stepper_motor.exe#name "stepper"#make_bin#steps_before_direction_change = 20h ; 十进制的32jmp start; ========= 数据 ===============; 二进制的数据用以控制步进电机; 顺时针以半步循环方式(半个步距角)转动:datcw db 0000_0110b ;BC-->C-->AB-->B-->BCdb 0000_0100bdb 0000_0011bdb 0000_0010b; 二进制的数据用以控制步进电机; 逆时针以半步循环方式(半个步距角)转动:datccw db 0000_0011b ;AB-->A-->BC-->B-->ABdb 0000_0001bdb 0000_0110bdb 0000_0010b; 二进制的数据用以控制步进电机; 顺时针以整步循环方式(一个步距角)转动:datcw_fs db 0000_0001b ;A-->AB-->BC-->0-->Adb 0000_0011bdb 0000_0110bdb 0000_0000b; 二进制的数据用以控制步进电机; 逆时针以整步循环方式(一个步距角)转动:datccw_fs db 0000_0100b ;C-->BC-->AB-->0-->C db 0000_0110bdb 0000_0011bdb 0000_0000bstart:mov bx, offset datcw ; 开始以顺时针半步循环方式执行mov si, 0mov cx, 0 ; 初始化计数器next_step:; 获取步进电机控制信号最高位, 若为1, 则表示就绪wait: in al, 7test al, 10000000bjz waitmov al, [bx][si]out 7, alinc sicmp si, 4jb next_stepmov si, 0inc cxcmp cx, steps_before_direction_changejb next_stepmov cx, 0add bx, 4 ; 下一组控制数据cmp bx, offset datccw_fsjbe next_stepmov bx, offset datcw ; 返回顺时针半步循环方式执行jmp next_step4. 尝试修改该程序,以精确控制步进电机的转速:修改说明:在原程序的OUT 7, AL一句后面加入如上图所示的代码,试图通过调用DOS系统中的INT 15H的86H号功能,即延时功能来控制步进电机每一步转动的时间,这里为了观察方便,设置每一秒转动一步(半步或整步)。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。

二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。

在调试过程中,学习及掌握debug程序的各种操作命令。

三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。

四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。

b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。

c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。

e) 使用debug程序调试程序的方法。

五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。

汇编输入输出程序设计

汇编输入输出程序设计

输入输出程序设计一、实验目的1)掌握输入输出指令的使用;2)了解对CMOS RAM的读写3)访问CMOS RAM,编程,以“年/月/日时:分:秒”的格式,显示当前的日期、时间。

观察并记录运行结果。

二、实验原理及基本技术路线图(方框原理图)程序源代码:assume cs:code,ds:datadata segmenttime db 'yy/mm/dd hh:mm:ss',0dh,0ah,'$'cmos db 9,8,7,4,2,0data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov si,0mov cx,6a: push cxmov al,cmos[bx]out 70h,alin al,71hmov ah,almov cl,4shr al,cland ah,0fhadd ax,3030hmov word ptr time[si],axinc bxadd si,3pop cxloop amov ah,6mov al,0mov bh,1fhmov cx,0mov dx,184fhint 10hmov ah,2mov bh,0mov dh,13mov dl,32int 10hmov dx,offset timemov ah,9int 21hmov ax,4c00hint 21hcode endsend start三、所用仪器、材料(设备名称、型号、规格等)Masm 6.0,debug。

四、实验方法、步骤1.使用masm6.0将所写的程序进行编译,生成exe文件,运行。

2.使用debug调试生成的exe文件,使用t命令进行单步调试。

3.记录下关键位置的调试截图。

五、实验过程原始记录(数据、图表、计算等)1.经过masm编译的程序b6.exe,得到程序运行结果2.r命令查看寄存器初始状态3.u命令进行反汇编4.使用t命令进行单步调试(1)设置好存储时间coms端口号和存放时间的内存位置的指针(2)从coms ram的9号单元读出当前年份的BCD码要读取CMOS RAM的信息,先要向地址端口70h写入要访问的单元的地址:(3)从数据端口71h中取得指定单元中的数据,相应的数据输入到AL中,同时将AL中的数据放入到AH中:(4)将AL中的数据右移4位,并且将AH的高4位置0,得到年份BCD码对于的十进制数据:(5)将AX中的数据加上3030H,得到十进制数据的ASCII码,并存放的time 数据段中:(6)完成年份的取出和存放,将BX和SI指向的位置改变,BX指向coms的下一个单元,即8号单元,取出月份,SI指向存放月份的位置,即[SI+3];转入第二次循环,取出并存放月份。

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

实验五输入输出程序设计
一、实验目的
1) 掌握输入输出程序的编写方法。

2) 熟悉系统功能调用的方法。

3) 熟悉动画程序的编写方法。

二、实验内容
1)在CRT上每隔一秒连续显示字符0-9。

编程提示
为了使输出的字符之间有空格,在每一个循环中输出一个0-9的字符和一个空格。

为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。

为了保证输出是十进制,增量后用DAA调整指令。

由于输出为一位十进制数,用AND 0FH 指令屏蔽高4位。

2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。

3)编制在屏幕上画线的子程序,调用该子程序画一矩形。

4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。

5)创建一磁盘文件,保存从键盘输入的字符串。

6)编写程序用设置系统时间,首先从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。

7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。

8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。

三、源程序
EXAM5-1
STACK SEGMENT STACK
DB 1024 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:MOV BL,0
LP:MOV DL,20H
MOV AH, 2
INT 21H
MOV AL,BL
ADD AL, 0
DAA
AND AL,0FH
MOV BL,AL
PUSH BX
OR AL,30H
MOV DL,AL
MOV AH, 2
INT 21H
MOV BX,3E8H
LP2:MOV CX,176H ;延时1ms
LP1:PUSHF
POPF
LOOP LP1
DEC BX
JNZ LP2
POP BX
INC BL
JMP LP
CODE ENDS
END START
执行程序EXAM5-1·EXE,屏幕上依次循环显示一个数字一个空格:
0 1 2 3 4 5 6 7 8 9 ……
EXAM5-2
STACK SEGMENT STACK
DB 1024 DUP(0)
STACK ENDS
DA TA SEGMENT
BUFF DB 6,7 DUP(?),‘$’
DA TA ENDS
INPUT MACRO BUFE
MOV DX,OFFSET BUFE
MOV AH,0AH
INT 21H
ENDM
PUTCHAR MACRO CHAR
MOV DL,CHAR
MOV AH,02H
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,SS:STACK START:MOV AX,DA TA
MOV DS,AX
INPUT BUFF ;读取字符串➝BUFF
PUTCHAR 0DH
PUTCHAR 0AH ;光标另起一行
MOV CX,0003H
NEXT:PUTCHAR 2AH
LOOP NEXT
MOV CL,BUFF+1
SUB CH,CH
MOV BX,OFFSET BUFF+2
BEGIN:MOV AL,[BX]
PUTCHAR AL
INC BX
LOOP BEGIN
MOV CX,0003H
NEXT1:PUTCHAR 2AH
LOOP NEXT1
MOV AH,4CH
INT 21H
CODE ENDS
END START
执行程序EXAM5-2·EXE,输入HELLO↙屏幕上显示结果:
*** HELLO ***
EXAM5-5
NAME EXAM6
SSTACK SEGMENT STACK ’stack’
DB 1024 DUP(?)
SSTACK ENDS
DATA SEGMENT
ASKNAME DB 0DH,0AH,’Enter the’
DB ’dest file name:$’
ASKCONT DB 0DH,0AH,’Enter the string’
DB ’as file content:’0dh,0ah,’$’ FILEBUF DB 62,63DUP(?)
HAND_D DW?
MSGMER DB 0DH,0AH,0AH
DB ’Directory full’,0DH,0AH,’$’
MSGWER DB 0DH,0AH,0AH
DB ’Disk full’,0DH,0AH,’$’
MSGSUC DB 0DH,0AH,0AH,
DB ’Write file is Successful’
DB 0DH,0AH,’$’
DATA ENDS
DISPLY MACRO TEXT
MOV DX,OFFSET TEXT
MOV AH,09H
INT 21H
ENDM
CRHAND MACRO PATH,ATTR
MOV DX,OFFSET PATH ;文件名
MOV CL,ATTR ;文件属性
XOR CH,CH
MOV AH,3CH
INT 21H
ENDM
WRHAND MACRO HAND,BUFF,BYTE
MOV BX,HAND
MOV DX,OFFSET BUFF
ADD DX,2
MOV CL,BYTE
XOR CH,CH
MOV AH,40H
INT 21H
ENDM
CLHAND MACRO HAND
MOV BX,HAND
MOV AH,3EH
INT 21H
ENDM
CODE SEGMENT
PROG PROC FAR
ASSUME CS:CODE,DS:DATA,SS:SSTACK
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
DISPLY ASKNAME ;提示输入文件名MOV DX,OFFSET FILEBUF
MOV AH,0AH
INT 21H
MOV DI,OFFSET FILEBUF[2]
MOV BL,FILEBUF[1]
XOR BH,BH
MOV BYTE PTR[BX][DI],00H
CRHAND FILEBUF[2],0 ;创建并打开新文件JC CRTERR
MOV HAND_D,AX ;存文件句柄DISPLY ASKCONT ;提示键入文件内容MOV DX,OFFSET FILEBUF
MOV AH,0AH
INT 21H
WRHAND HAND_D,FILEBUF,FILEBUF[1]
JC WRITERR
CLHAND HAND_D
DISPLY MSGSUC
JMP EXIT CRTERR:DISPLY MSGMER
JMP EXIT WRITERR:DISPLY MSGWER EXIT:RET
PROG ENDP
CODE ENDS
END PROG。

相关文档
最新文档