微机原理及汇编语言作业 编程
微机原理与汇编语言_实验2_分支程序设计
other: mov dx, offset info5 mov ah, 09h int 21h pend: mov ax, 4c00h int 21h end start 四、实验总结 1.通过本次实验我掌握了分支程序的设计方法,掌握宏定义及宏调用的基本方法,了解小写和大写字母 的 ASCII 码表示及其转换方法,了解数字及其它字符在的 ASCII 码表示方法,进一步掌握调试工具的使用 方法。 2.在进行补全实验框架源码的时候,输出字符时会出现乱码的现象,后来查明原因是因为在汇编中会将 字符按 asii 码表转换为二进制数,中文的标点符号 asii 中没有,所以会出现乱码。所以解决这些问题的 方式就是将中文的标点符号改成英文的,但是在汇编中的某些标点符号是有特殊含义的比如说单引号, 是用来表示字符的,对这种情况,可以将其人工将其转换为 asii 表的 10 进制数字 96 即可。 3.在进行习题 1 和习题 2 的练习过程中,曾经误认为输入的就是数字,事实上程序会将从键盘中读入的 数字通过 asii 表转换成二进制数字,所以在进行判断的时候,要与输入数的 asii 表对应的数值进行比对 大小,而不是输入数字本身。
1.3 流程图及程序框图(见图)
2
开始
显示提示信息“Please Press Any Key to input a letter” 及功能号为 1 的接收键盘输入单个字符的指令序列 Y
(AL)<’0’
Y
(AL)<=’9’ Y (AL)<’A’
输入的是数字,显示关信息
Y (AL)<=’Z’ Y 输入的是大写字母,显示信息 Y (AL)<’a’
微机原理与汇编语言 实
姓 名 xxx 学 号 课程名称 实验名称
汇编语言与微机原理
汇编语言与微机原理汇编语言和微机原理是计算机科学中两个重要的概念。
汇编语言是一种低级语言,用于编写计算机程序,在计算机硬件层面上进行操作和控制。
微机原理则是关于微型计算机的基本工作原理和组成结构的知识。
一、汇编语言的概念与应用汇编语言是一种直接操作计算机硬件的编程语言,与高级语言相比,汇编语言更接近计算机底层,能够直接控制硬件资源。
汇编语言通过使用助记符和指令直接操作寄存器、内存和其他硬件设备,实现程序的运行逻辑。
它是高级语言与计算机硬件之间的桥梁。
汇编语言在许多方面都有广泛的应用。
首先,在嵌入式系统领域,汇编语言可以更好地利用有限的资源,提高系统的性能和响应速度。
其次,在计算机游戏开发中,汇编语言可以直接控制硬件,实现更复杂的图形和音频效果。
此外,在密码学和安全领域,使用汇编语言编写的代码更难以被破解和攻击。
二、微机原理的基本概念微机原理是研究微型计算机的基本工作原理和组成结构的学科。
微型计算机由中央处理器(CPU)、存储器、输入输出设备及总线等几个基本组成部分构成。
微机原理主要探讨这些组件的工作原理以及它们之间的通信和配合方式。
CPU是微机系统的核心部件,它承担了计算和控制的功能。
CPU通过指令周期不断地执行指令,从而完成任务。
存储器用于存储程序和数据,分为内存和外存两种。
输入输出设备用于与外部环境进行数据交互。
而总线则连接了CPU、存储器和输入输出设备,实现了它们之间的数据传输和通信。
在微机原理中,还需要了解指令系统、寻址方式、中断处理以及时序控制等内容。
指令系统是CPU能够理解和执行的指令集合,每条指令都对应着一种操作。
寻址方式决定了CPU如何访问存储器中的数据。
中断处理可以让CPU在执行任务过程中暂时停下来处理优先级更高的事件。
时序控制则负责协调微机系统各个组件的工作顺序和时机。
三、汇编语言与微机原理的关系汇编语言和微机原理是紧密相关的。
汇编语言是在微机原理的基础上进行编程的工具。
通过汇编语言,可以更深入地了解微机原理中的各个组成部分以及它们的工作方式。
微机原理实验系统调试命令与编程应用
微机原理实验系统调试命令与编程应用
微机原理实验系统通常是一个模拟的计算机系统,用于学习和实践微机原理相关的知识和技能。
在调试微机原理实验系统时,你可以使用一些命令和编程应用来执行各种操作。
以下是一些常见的命令和编程应用的示例:
1. 汇编语言编程:使用汇编语言编写程序,并通过汇编器将其转换为机器码。
可以使用指令集手册来了解特定处理器的指令集,并使用汇编语言进行编程。
2. 调试器:调试器是一个用于程序调试的工具,可以逐步执行程序,并检查程序状态、寄存器值和内存内容。
你可以使用调试器来跟踪程序的执行流程,定位问题和错误。
3. 单步执行:单步执行是指一次执行一条机器指令,并观察执行结果。
可以使用单步执行来逐步调试程序,以查看每个指令的影响和结果。
4. 断点设置:通过设置断点,你可以在程序执行到指定位置时暂停执行。
这允许你检查程序在该位置的状态,并进行必要的调试操作。
5. 寄存器操作:在微机原理实验系统中,你可以使用一些命令来读取和修改CPU寄存器的值。
这对于观察和调试程序时的寄存器状态非常有用。
6. 内存操作:可以使用命令来读取和写入内存中的数据。
你可以使用这些命令来观察和修改程序的数据区域,以及进行其他与内存相关的操作。
7. 输入/输出模拟:微机原理实验系统通常提供了输入和输出设备的模拟。
你可以使用相关的命令和编程应用来模拟输入设备(如键盘)的输入和输出设备(如显示器)的输出。
请注意,具体的命令和编程应用取决于你使用的微机原理实验系统的软件和硬件平台。
建议参考相关的文档和教材,以了解特定系统的详细调试命令和编程应用。
微机原理与汇编语言_实验7_8255并行接口实验
微机原理与汇编语言实验报告姓名x x x学号xxxxxx专业班级计科x班课程名称微机原理与汇编语言实验日期实验名称8255并行接口实验成绩一、实验目的掌握8255A的编程原理。
二、实验内容1、实验原理本实验用到两部分电路:开关量输入输出电路和8255可编程并口电路。
8255A是比较常用的一种并行接口芯片,其特点在许多教科书中均有介绍。
8255A有三个8位的输入输出端口,通常将A端口作为输入用,B端口作为输出用,C端口作为辅助控制用,本实验也是如此。
实验中,8255A工作于基本输入输出方式(方式0)。
2、实验步骤1)实验接线CS0CS8255;PA0~PA7平推开关的输出K1~K8;PB0~PB7发光二极管的输入LED1~LED8。
2)编程并全速或单步运行。
3)全速运行时拨动开关,观察发光二极管的变化。
当开关某位置于L时,对应的发光二极管点亮,置于H时熄灭。
3、实验结果程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。
例如:K2置于L位置,则对应的LED2应该点亮。
三、实验源码及框图assume cs:codecode segment publicorg 100hstart: mov dx,04a6h ;控制寄存器地址mov ax,90h ;设置为A口输入,B口输出out dx,axstart1: mov dx,04a0h ;A口地址in ax,dx ;输入mov dx,04a2h ;B口地址out dx,ax ;输出jmp start1code endsend start四、练习键盘接口实验。
请阅读实验指导手册,根据实验台键盘电路结构,设计实验,编制程序实现键盘的按键识别,并将其代码通过Led指示灯显示。
练习键盘框图:实验源码:assume cs:codecode segment publicorg 100hTimer = 10;延时常量;设置行线接输出端口,列线接输入端口start:mov dx,04a6h;控制端写控制字,设置为A口输入,B口输出mov al,90hout dx,alWait:mov al,00hmov dx,04a2hout dx,al ; 往所有行线上输出低电平movin al,dx ; 读取列值cmp al,0ffh ;是否有列线为低电平jz wait ;否,则循环等待done: call delay ;是,则延迟去抖动mov cx,8 ;行数送CXkey2:mov al,0mov dx,04a2h ;B口作为输出out dx,al ;设置行线全为低mov dx,04a0h ;A口作为输入in al,dx ;读取列值cmp al,0ffhjz key2 ;无闭合键,循环等待push ax ;有闭合键,保存列值push ax;设置行线接输入端口,列线接输出端,A口输出,B口输入mov dx,04a6hmov al,82hout dx,almov dx,04a0h ;A口输出pop axout dx,al;输出列值mov dx,04a2h ;B口输入in al,dx ;读取行值pop bx ;组合行列值mov ah,bl ;此时,al=行值,ah=列值mov si,offset table ;table保存键盘行列值mov di,offset char ;char保存键代码值mov cx,24 ;cx=键的个数key3:cmp ax,[si];与键值比较jz key4 ;相同,说明查到inc si ;不相同,继续比较inc siinc diloop key3jmp start ;全部比较完无相同则再进行扫描一遍jmp wait ;全部比较完,仍无相同,说明是重键key4:mov al,[di];获取键代码送ALpush ax;判断按键是否释放,没有则等待call delay ;按键释放,延时消除抖动;后续处理;将代码值输给小灯mov dx,04a6h;控制寄存器地址mov ax,0080h ;设置C口输出out dx,axmov dx,04a4h ;将键代码从C口输出送给小灯pop axout dx,aldelay procpush bxpush cxmov bx,timer;外循环次数由timer确定delay1: xor cx,cxdelay2: loop delay2 ;内循环dec bxjnz delay1pop cxpop bxretdelay endp;键盘的行列值表table dw 0fefeh ;键1的行列值(键值)dw 0fefdh ;键2的行列值dw 0fefbh ;键3的行列值dw 0fe07h ;键4的行列值dw 0fedfh ;键6的行列值dw 0febfh ;键7的行列值dw 0fe7fh ;键8的行列值dw 0fdfeh ;键9的行列值dw 0fdfdh ;键10的行列值dw 0fdfbh ;键11的行列值dw 0fd07h ;键12的行列值dw 0fdefh ;键13的行列值dw 0fddfh ;键14的行列值dw 0fdbfh ;键15的行列值dw 0fd7fh ;键16的行列值dw 0fbfeh ;键17的行列值dw 0fbfdh ;键18的行列值dw 0fbfbh ;键19的行列值dw 0fb07h ;键20的行列值dw 0fbefh ;键21的行列值dw 0fbdfh ;键22的行列值dw 0fbbfh ;键23的行列值dw 0fb7fh ;键24的行列值……;S25、S26其他键的行列值;键盘的键代码表char db 30h ;键1的代码值db 31h ;键2的代码值db 32h ;键2的代码值db 33h ;键3的代码值db 35h ;键5的代码值db 36h ;键6的代码值db 37h ;键7的代码值db 38h ;键8的代码值db 39h ;键9的代码值db 41h ;键A的代码值db 42h ;键B的代码值db 43h ;键C的代码值db 44h ;键D的代码值db 45h ;键E的代码值db 46h ;键F的代码值db 61h ;键a的代码值db 62h ;键b的代码值db 63h ;键c的代码值db 64h ;键d的代码值db 65h ;键e的代码值db 66h ;键f的代码值db 67h ;键g的代码值db 68h ;键h的代码值……;S25、S26其他键的代码值code endsend start实验现象:按相应的键,LED灯会显示相应的代码。
微机原理与接口技术 实验一 8086汇编语言的编程实践
实验一8086汇编语言的编程实践【实验目的】1.掌握8086汇编语言编程以及调试的过程。
2.学会使用masm.exe、debug.exe、td.exe等软件。
【实验内容】1.通过示范源程序熟悉从如何建立源文件到进行调试【实验步骤】1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。
如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。
请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。
2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。
下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。
在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口。
窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F 打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
如果键入EDIT命令时已带上了源程序文件名(C:\ASM\HELLO.ASM),在编辑窗口上部就会显示该文件名。
如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。
编辑窗口用于输入源程序。
EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。
微机原理汇编语言程序设计
n 显然,第二种写法要比第一种写法要好
On the evening of July 24, 2021
4.2.3 语句的操作数
o 4.2.3.1 常量 o 4.2.3.2 变量和标号 o 4.2.3.3 表达式
Courseware template
On the evening of July 24, 2021
汇编语言:用指令的助记符来表示二进制机器码的语言称为汇编语言, 即是机器语言的符号表示。它是一种面向机器的程序设计语言,通常是 为特定计算机或计算机系列专门设计的。特点是允许直接调用CPU内部 资源,代码精简,占内存少,执行速度快,但通用性差,编写、调试周 期长。常用来编制系统软件、实时控制程序、实时通信程序及接口的驱 动程序等。例:MOV SP,BX
• 对指令性语句:0,1,2个 • 对指示性语句:根据需要而定 • 操作数之间以逗号分隔 • 操作数可以由标号、常量、变量、表达式、寄存器操作数
和存储器操作数等构成
例如:AX,[DI+BX+10],DATA,200,16*8+TABLE,等等
On the evening of July 24, 2021
On the evening of July 24, 2021
4.2.3.2 变量与标号-变量
Courseware template
变量:指存储器存储单元中的数据,数据运行时可改变 变量名:是存储单元的符号地址 变量在程序中作为存储器操作数被引用 变量有三个属性:
段地址:变量所在段的段地址 偏移地址:变量所在存储单元的偏移地址 类 型:有BYTE、WORD和DWORD等
o 4.2.4 伪指令 o 4.2.5 宏指令
Courseware template
微机原理实验编程题(完整)
1)(正确)比较两个无符号数的大小(量个数放在内存S3的连续两个单元中),将大数存入MAX单元中。
DATAS SEGMENTBUF DB 1,2CNT EQU $-BUFDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV CX,CNT-1LEA BX,BUFMOV AL,[BX]L2: INC BXCMP AL,[BX]JAE L1MOV AL,[BX]L1:LOOP L2ADD AL,30H- 1 - / 16MOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND STAR2)(正确)试编一程序,求三个带符号数据中的最大值,并将最大值存入MAX单元中,设三个带符号数分别在三个变量X,Y,Z中存储。
DATAS SEGMENTX DB 5Y DB-2Z DB 0MAX DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV AL,XMOV BL,YCMP AL,BLJG L1MOV AL,BLL1:MOV BL,ZCMP AL,BLL2: MOV MAX,ALMOV AH,4CHINT 21HCODES ENDSEND START3)(正确)根据MODE单元中编号0-7分别转向L0-L7标号处,执行L0-L7处分别完成显示‘0-7’字符,即当MODE=0时,转向L0标号,完成显示‘0’,当MODE=7时,转向L7标号,完成显示‘7’。
DATAS SEGMENTMODE DB 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:- 3 - / 16MOV AX,DATASMOV DS,AXMOV AL,MODECMP AL,0JZ L0CMP AL,1JZ L1CMP AL,2JZ L2CMP AL,3JZ L3CMP AL,4JZ L4CMP AL,5JZ L5CMP AL,6JZ L6MOV DL,'7'MOV AH,02HINT 21HJMP L8L0:MOV DL,'0'MOV AH,02HINT 21HJMP L8L1:MOV DL,'1'MOV AH,02HINT 21HJMP L8L2:MOV DL,'2'MOV AH,02HINT 21HJMP L8L3:MOV DL,'3'MOV AH,02HINT 21HJMP L8L4:MOV DL,'4'- 5 - / 16MOV AH,02HINT 21HJMP L8L5:MOV DL,'5'MOV AH,02HINT 21HJMP L8L6:MOV DL,'6'MOV AH,02HINT 21HJMP L8L8:MOV AH,4CHINT 21HCODES ENDSEND START4)(正确)根据输入值(0-4)的不同,执行不同的操作,用转移标法编写程序。
微机原理汇编程序设计
微机原理课程设计设计一:从键盘输入十六进制数并显示出二进制值设计二:字符串匹配设计设计三:字符和数据显示的设计设计四:键盘输入小写字母转换成大写字母设计五:计算N!的设计2011-7-6设计一:从键盘输入十六进制数并显示出二进制值实验目的:掌握接收键盘数据的方法,并了解数据显示时须转换为ASCII码的原理。
实验内容:将键盘接收到的4位十六进制数据转换为等值的二进制数,再显示在屏幕终端上。
流程图:程序源代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENTMARK DB ?MESS DB 'INPUT THE NUMBER! Press Enter to Transition,Press Space to Exit!',0DH,0AH,'Input:$'ERROR DB 0DH,0AH, 'Input Error!',0DH,0AH,'$'DA TA ENDSSTACK SEGMENTSTA DW 32 DUP(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPHEAD: CRLFMOV MARK,0MOV AH,09HLEA DX,MESSINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01HJE HEADMOV CX,0010H ;16位MOV BX,DXTTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30HMOV AH,02HINT 21H ;显示二进制位对应的ASCII字符LOOP TTTJMP HEADFINI: MOV AH,4CHINT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CXXOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DH ;输入为回车,则进行转换JE PPPCMP AL,20H ;输入为空格,则退回DOSJE FINICMP AL,30HJB KKKSUB AL,30HCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20HGETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21HMOV MARK,01HPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START运行结果设计二:字符串匹配设计实验内容:编写程序实现两个字符串比较。
微机原理与汇编语言实验指导书
实验一显示程序[实验目的]1.掌握汇编语言程序上机的实验过程2.掌握显示程序的基本设计方法。
[实验原理]汇编语言上机过程1、建立汇编源程序(建立文件名.asm)(1)通过MD-DOS自带的EDIT.EXE文本编辑器进行输入和其它的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。
2、编译目标文件(即:编译为.obj .lst .crf文件)将正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。
如果此时程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,可根据提示去逐一修改。
3、连接为可执行文件(即:连接为.exe 或.com文件)在DOS提示符下: LINK filename 回车4、运行编译好的可执行文件当4通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。
在试运行期间,要尽量试一些临界状态,看程序是否运行稳定、结果是否正确,进行5。
5、用调试工具调试,重新修改(逻辑错误)用DOS中自带的调试程序DEBUG.EXE来进行程序调试、检查错误。
6.有关显示DOS基本命令1)单个字符显示命令将要显示的字符的ASCII码送给DL寄存器中断功能号2送AH寄存器,中断类型21H.如显示“3” MOV DL,33H 或 MOV DL, ‘3’如显示‘A’ MOV AH,‘A’MOV AH,2 MOV AH,2 MOV AH,2INT 21H INT 21H INT 21H 2)字符串显示命令将要显示的字符串所在存储区的首地址送给DX寄存器中断功能号9送AH寄存器,中断类型21H.如显示字符串“HELLO”存储区定义为 T DB“HELLO”,10,13,24H LEA DX,TMOV AH,9[实验方法及步骤] INT 21H1、编写实验程序。
2、编译。
3、运行(单步,跟踪),检查结果。
微机原理实验 8086CPU系统寻址方式和汇编语言程序设计
微机原理实验报告实验一 8086CPU系统寻址方式和汇编语言程序设计一、实验目的1. 掌握 8086CPU 系统的逻辑地址和寻址方式;2. 掌握 8086CPU 系统中机器数的表示方式;3. 掌握指令的机器码表示方法;4. 掌握 TPC-USB 集成开发环境程序设计和调试方法;5. 掌握汇编语言实现具体算法的方式,区分汇编语言与高级语言的编程风格二、实验内容1. 写出在 TPC-USB 环境下汇编语言程序设计步骤;①点击工具栏中“新建”按钮,在编辑框输入程序代码,保存为一个以“.asm”结尾的汇编源文件。
②点击工具栏“编译+链接”按钮,若程序有错则返回修改代码,若没有错误,则编译链接成功,形成两个以“.obj”结尾的目标文件和以“.exe”结尾的可执行文件。
③点击工具栏“调试”按钮,在弹出的框中选择“Continue and don’t ask again”,执行“连续运行”或“单步运行”或“跳过”,在执行此步骤前可设置断点。
通过寄存器窗口、反汇编窗口、内存窗口查看相应内容。
2. 汇编语言程序设计和调试实验1)源程序:CODE SEGMENTASSUME CS:CODESTART:MOV AX,8086HMOV BX,6808HADD AX,BXMOV CX,AXPUSH CXPOP DXL1:JMP L1CODE ENDSEND START2)反汇编结果:3)单步执行每条指令后对应寄存器的变化值:START:MOV AX,8086H ; AX:0×00000FE6 ——>0×00008086IP: 0×00000000 ——>0×00000003MOV BX,6808H ;BX: 0×000008FEA——>0×00006808IP: 0×00000003 ——>0×00000006ADD AX,BX ; AX:0×00008086 ——>0×0000E88EIP: 0×00000006 ——>0×00000008FLAGS: 0×00007202——>0×00007286MOV CX,AX ; C X: 0×000C0000 ——>0×000CE88EIP: 0×00000008 ——>0×00000000PUSH CX ; SP:0×0000FFFE ——>0×0000FFFCIP: 0×00000000 ——>0×0000000BPOP DX ; SP:0×0000FFFC ——>0×0000FFFED X: 0×00002002 ——>0×0000E88EIP: 0×0000000B ——>0×0000000C3. 编程设计实验(一)内存中现有 X 和 Y 两个存储单元,分别存有 42 和-43,利用汇编语言编程计算这两个数之和,并将结果放入 SUM 单元;1) 程序流程图:开始X=42Y=-43将数据段DATA的首地址送到DSAL=XAL=AL+YSUM=AL结束2)源程序:DATA SEGMENTX DB42Y DB -43SUM DB ? ;?用来占位DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;DATA的数据送到DSMOV AL,XADD AL,YMOV SUM,ALLOOP:JMP LOOPCODE ENDSEND START3)内存结果(DS)4)反汇编结果:4. 编程设计实验(二)数据段中的一个存储单元 X 中存放的数据为 10H,编程实现将该存储单元中的数据循环左移四位后存放到数据段的另一个存储单元 Y 中。
微机原理 8086汇编语言程序设计
伪指令语句的格式为:
[符号名]
伪指令助记符
[操作数] [;注释]
第5章 8086汇编语言程序设计
3.宏指令语句
宏是一个以宏名定义的指令序列。一旦把某程序 段定义成宏,则可以用宏名代替那段程序。在汇 编时,要对宏进行宏展开,即把以宏名表示的地 方替换为该宏对应的指令序列的目标代码。宏指 令可以看成指令语句的扩展,相当于多条指令语 句的集合。 宏指令格式为: [宏名] 宏指令助记符
为了提高程序的可读性,可以在汇编语句后以 分号“;”为起始标志,加入注释。
第5章 8086汇编语言程序设计
汇编语言和操作系统(DOS)的接口
计算机一旦启动成功,由DOS掌握CPU的控制权 。应用程序只是作为DOS的子程序,应用程序 执行完,必须返回DOS。上述程序的第7行、第 9行~第11行、第17行和第18行就是为了完成 此功能而设计的。
(3)名字的命名规则 ① 合法符号:字母(不分大小写)、数字及 特殊符号(“?”,“@”,“_”,“$”, “• ”)。 ② 名字可以用除数字外所有的合法符号开头 。但如果是用到符号“· ”,那么这个符号 必须是第一个字符。 ③ 名字的有效长度不超过31个英文字符。 ④ 不能把保留字(如CPU的寄存器名、指令 助记符等)用作名字。
第5章 8086汇编语言程序设计
汇编程序完成以下几个任务: 将汇编语言源程序翻译成目标代码程序; 按指令要求自动分配存储区(包括程序区 、数据区等); 自动把源程序中以各种进制表示的数据都 转换成二进制形式的数据; 计算表达式的值; 对汇编语言源程序进行语法检查,并给出 语法出错的提示信息。
第5章 8086汇编语言程序设计
4.汇编语句格式说明(续)
微机原理汇编实验-汇编语言程序上机操作方法实验
学生实验报告实验课程名称:微机原理汇编实验开课实验室:年月日年级、专业、班学号姓名成绩实验项目名称汇编语言程序上机操作方法实验指导教师教师评语一、实验目的学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,为后继课程打下坚实的基础。
二、实验原理使用MASM汇编语言设计工具,设计简单的汇编语言程序并进行运行调试,以便掌握汇编语言设计、编写、调试和运行程序的方法。
三、实验仪器、材料1.软件MASM5.02.PC微机一台四、实验步骤1.建立asm文件在windows系统环境下,应用写字板或其它文字编辑软件编写汇编语言源文件。
注意保存的源文件以asm为后缀。
2.用汇编程序MASM对源文件汇编产生目标程序.OBJ。
3.用连接程序LINK产生可执行文件.EXE。
4.执行程序。
5.程序调试五、实验源代码;------------------------------------------------- ;程序名:Lab101;功能:把NUM数组中的最大值取出并显示输出;-------------------------------------------------DATA SEGMENTNUM DB 12,52,36,14,25,32,14,126 COUNT EQU ($-NUM)DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CX,COUNT ;初始化循环次数MOV SI,OFFSET NUMMOV AL,[SI]MOV DL,ALINC SIAGAIN:MOV AL,[SI]INC SICMP DL,ALJL SWAPLOOP AGAINJMP FINISHSWAP:MOV DL,ALLOOP AGAINJMP FINISH;--------------------------------;子程序名:TRANNUM;功能:将数字转换为字符串;入口参数:AL;出口参数:无;--------------------------------TRANNUM PROC NEARMOV AL,DLXOR AH,AHMOV CX,3MOV DL,10TRAN1:DIV DLXCHG AH,ALADD AL,'0'PUSH AXXCHG AH,ALMOV AH,0LOOP TRAN1MOV CX,3TRAN2:POP DXCALL DISPLAYLOOP TRAN2RETTRANNUM ENDP;--------------------------------;子程序名:DISPLAY;功能:将单个字符显示输出;入口参数:DL;出口参数:无;--------------------------------DISPLAY PROC NEARMOV AH,02HINT 21HRETDISPLAY ENDPFINISH:CALL TRANNUMMOV AH,4CH ;程序结束返回DOSINT 21HMAIN ENDPCODE ENDSEND START六、实验过程原始记录(数据图表、计算等)1、打开命令提示符:输入cmd2、输入:cd G:/asm/tos3、输入:G:4、输入:masm lab1015、输入:link lab1016、输入:lab101七、实验结果分析从程序代码分析,所给数值中最大值为126,运行程序后输出结果为126,说明程序能够实现其功能。
微机原理-实验一-汇编语言-冒泡排序
微机原理实验报告班级:XXXXX姓名:XXXX学号:20XXXXXXXXX大学信息科学与技术学院信息工程系实验一汇编语言程序设计-(具体题目)一、实验目的(根据实际情况修改):1、熟悉MASM编译环境,了解程序的汇编方法;2、熟悉常用汇编指令,学习汇编程序设计方法;3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式;4、了解冒泡法原理,学习多重循环的编程方法。
二、实验内容:编写程序,用冒泡法实现将数据段内9,8,7,6,5,4,3,2,1按照由小到大的顺序重新排列。
三、程序流程图和程序代码1、流程图2、代码与注释(代码不能和指导书完全一样,写出注释,写出寄存器尤其是DS的值)data segmentbuf1 db 8,7,6,5,4,3,2,1data endscode segmentassume cs:code,ds:datastart: mov ax,data //传送数据段datamov ds,axmov dx,7 //dx放外循环7次L3: mov cx,dx //cx放内循环7次lea si,buf1 //将db里的数据传送到siL2: mov al,[si]cmp al,[si+1] //比较[si]与[si+1]jb L1 //[si]<[si+1],跳转到L1xchg al,[si+1] //[si]>[si+1],两两交换mov [si],alL1: inc si //si减1loop L2 //循环L2dec dx //外循环减1,没减到0则跳转到L3 jnz L3 //入内循环,计数初值mov ah,4chint 21hcode endsend start四、调试过程及遇到的问题1、程序执行截图2、调试用到的命令-U命令:查看数据段地址;-d命令:查看运行前后存储器内容;-g命令:运行程序;-t命令:查看运行前后寄存器和存储器内容。
3、遇到的问题及解决办法问题:运行程序后,数据1在存储器地址末尾没变。
微机原理与汇编语言程序设计实验一
实验一汇编语言上机环境及基本操作一、实验目的及要求1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、实验内容1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSSTACK SEGMENT STACK ’STACK’STA DB 10 DUP(?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。
图1 用EDIT编辑ABC.AS M程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
微机原理与汇编语言实验03_循环程序设计实验
微机原理与汇编语言实验实验三循环程序设计实验一实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二实验预习要求1、复习比较指令、条件转移指令和循环指令。
2、复习循环程序的结构、循环控制方法等知识。
3、读懂“三实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。
4、根据“三实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
5、从“四实验习题”中任选一道题目,编写源程序,以便上机调试。
三实验内容计算1+2+……n=?,其中n通过键盘输入。
要求在屏幕上提供如下信息:Please input a number(1 627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。
1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。
将键盘输入的十进制数转换为二进制数的程序清单如下:.model small.stack.dataINF1 DB "Please input a number (0-65535):$"IBUF DB 6,0,6 DUP(?).codeSTART: MOV AX, @dataMOV DS, AXMOV DX, OFFSET INF1MOV AH, 09HINT 21HMOV DX, OFFSET IBUF ;键入一个十进制数(<65535)MOV AH, 0AHINT 21HMOV CL, IBUF+1 ;十进制数的位数送CXMOV CH, 0MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)MOV AX, 0 ;开始将十进制数转换为二进制数AGAIN: M OV DX, 10 ;((0⨯10+a4) ⨯10+…) ⨯10+a0MUL DXAND BYTE PTR [SI], 0FHADD AL, [SI]A DC AH, 0I NC SILOOP AGAINMOV AH, 4CHINT 21HEND START本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
微机原理与汇编语言作业参考答案
《微机原理与汇编语言》作业一答案一、填空题1、计算机中的CPU由运算器和控制器组成。
2、根据传送的内容不同,微型计算机系统总线可以分为数据总线、地址总线和控制总线。
3、(513.85)10 = ( 201.D999 )16 (105.3)8 = ( 69.375 )10(9E.A)16 = ( 236.5 )8(1001.11001 )2 = ( 9.78125 )104、“9”的ASCII码是39H ,“DEL”的ASCII码是7FH ,“K”的ASCII码是4BH 。
5、假定机器的字长为8位,且最高位为符号位,则(-127)10的原码用8位二进数表示为11111111 ,其补码用8位二进数可表示为10000001 。
6、[4C10H]补= [ 4C10H ]原[9DH]补= [ -63H ]原7、I/O端口有两种编址方式,分别是统一编址和独立编址。
8、有一个由20个字组成的数据区,其起始地址为610AH:1CE7H,则数据区首地址为62D87H ,数据区末地址为62DAEH 。
9、8086寻址I/O端口时,使用16 条地址总线,可以寻址32K 个字端口或64K 个字节端口。
二、名词解释1、字节、字、字长字节:是计算机中通用的的基本单元,它由8个二进制位组成,即8位二进制数组成一个字节。
字:是计算机内部进行数据处理的基本单位。
对于16位微型计算机而言,字由两个字节组成,每个字节长度为8位,分别称为高位字节和低位字节。
对于32位的微型计算机,它由4个字节组成,组合后为双字。
字长:是计算机在交换、加工和存放信息时,其信息位的最基本长度,决定了系统一次传送的二进制数的位数。
各种类型的微型计算机字长是不相同的,字长越长的计算机,处理数据的精度和速度就越高。
因此,字长是微型计算机中最重要的指标之一。
2、主频、基本指令执行时间主频:也称为时钟频率,通常是指计算中时钟脉冲发生器所产生的时钟信号的频率,单位为MHz(兆赫),它决定了微型计算机的处理速度。
微机原理8086汇编语言程序设计
;这是一个乘10子程序
;使用寄存器AX
;入口:AX,出口:AX
proc far
push bx
;保护现场
pushf
add ax,ax
;2ax
功
mov bx,ax
;2ax ?bx
能
add ax,ax
;4ax
程
add ax,ax
;8ax
序
add ax,bx
;10ax
段
popf
;恢复现场
pop bx
ret
endp
第四章 8086汇编语言程序设计
? 几个概念 ? 8086汇编语言的语句 ? 8086汇编中的伪指令 ? 8086汇编中的运算符 ? 汇编语言程序设计 ? 宏定义与宏调用 ? 系统调用
几个概念
? 汇编语言 ? 汇编语言源程序 ? 汇编 ? 汇编程序
4.1 8086汇编语言的语句
汇编语言由指令性语句和指令性语句组成 ? 一、指令性语句格式
CODE SEGMENT
;定义代码段
ASSUME DS:DATA , CS: CODE
START: MOV AX , DATA
;初始化DS
MOV DS , AX
……
MOV AX , 4C00H ;返回DOS
INT 21H
CODE ENDS
;代码段结束
END START
;源程序结束
;段属性说明
? 特点 ? 程序分段 ? 语句由指令性和指示性语句组成 ? 两种程序框架
? 3、 ORG伪指令、地址计数器 $
ORG伪指令格式: ORG <表达式>
? 4、END 表示源代码结束 格式为: END 常数或表达式.
微机原理8086汇编程序设计
03
MOV指令用于将源操作数复制 到目标操作数,ADD、SUB等 指令用于执行算术运算,CMP 指令用于比较两个操作数的大 小。
算术运算类指令
01
算术运算指令用于执行加法、减法、乘法和除法等算术运算。
02
指令包括ADD、SUB、MUL、DIV等。
03
ADD指令将两个操作数相加并将结果存储在目标操作数中, SUB指令从第一个操作数中减去第二个操作数,MUL指令将 两个操作数相乘并将结果存储在目标操作数中,DIV指令将第 一个操作数除以第二个操作数并将商存储在目标操作数中。
子程序设计的特点是能够提高程序的模块化程度,便于代码重用和维护。同时,子程序可以独立于主 程序进行测试和调试,提高了程序的可靠性。但是,子程序调用会增加程序的执行时间,需要注意优 化子程序的性能。
05 汇编语言与高级语言的接 口
C语言与汇编语言的混合编程
调用约定
在C语言中调用汇编代码时,需要遵循特定 的调用约定,如参数传递方式、寄存器使用 等。
嵌入汇编
在C语言中嵌入汇编代码,可以直接在C程序中编写 汇编指令,但需要注意语法和语义的正确性。
汇编模块
将汇编代码编写成独立的汇编模块,通过外 部函数调用的方式在C程序中使用。
汇编语言在嵌入式系统中的应用
实时性控制
01
汇编语言具有直接控制硬件的能力,适用于嵌入式系统中的实
时性控制,如中断处理、定时器控制等。
02
指令包括JMP、CALL、RET等。
03
JMP指令用于无条件跳转到指定的地址执行程序,CALL指令用于调用子程序并 将返回地址压入堆栈中,RET指令用于从子程序返回并恢复原来的执行流程。
串操作类指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五大组题
5.一个32位数存放在以数据段的BUF单元开始的位置。
编写子程序统计该数中含“1”的个数,并将其结果存入RSLT字节单元。
stac segment stack
db 1024 dup(0)
stac ends
data segment
RSLT db 00H ;使rslt初值为零
buf dd 12345678h ;定义buf
data ends
code segment 'code'
assume cs:code,ds:data,ss:stac
start: mov ax,data
mov ds,ax
mov cl ,32
call again ;调用子程序
mov ax ,4c00h
int 21h
gain proc ;定义过程
shr word ptr ds:[si+2],1 ;最高字逻辑右移一位,D16进入CF
rcr word ptr ds:[si+0],1 ;CF移入D15,最低字右移一位进入CF
nc L1
inc RSLT
L1:again endp
code ends
end start
55.在0200H单元中有一个数x,利用移位和相加的办法,使x×10(假定x×10>255)后送回原单元。
stac segment stack
db 1024 dup(0)
stac ends
data segment
org 0200h ;将变量x的定位在0200h处
x db 56h
data ends
code segment 'code'
assume cs:code,ds:data,ss:stac
start: mov ax,data
mov ds,ax
mov al,x ;把x放到al中
+ xor ah,ah ;使AH=0,同时使CF=0
shl ax,1 ;AX=AL*2
mov bx,ax ;BX=AX=AL*2
shl ax,1 ;AX=AL*4
shl ax,1 ;AX=AL*4
add ax,bx
mov x,al ;将ax中低八位放到x中
mov x+1,ah ;将ax中高八位放到x+1中
mov ax, 4c00h
int 21h
code e nds
end start
75.编写子程序。
将AL中的二进制数转换成对应的ASCII码(置于AL中)返回。
主程序调用子程序实现上述功能。
.model small
.stack
.data
.code
start: mov ax,@data
mov ds,ax
mov al,28h
call label1 ;调用子程序
mov ax,4c00h
int 21h
label1 proc
and al,0fh ;只取al的低四位
or al,30h ;al高四位变成3(0~9的ASCII码是30h~39h)
cmp al,39h ;是0~9还是0A~0Fh(A~F的ASCII的值是41h~46h)
jbe htoend ;小于等于39h,al低4位的数值在0~9之间
add al,7 ;数值在0A~0F间,其ASCII码值还要加上7 htoend: ret ;子程序返回
label1 endp ;过程结束
end start。