微机原理及汇编语言作业 编程

合集下载

微机原理与汇编语言_实验2_分支程序设计

微机原理与汇编语言_实验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并行接口实验

微机原理与汇编语言_实验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汇编语言的编程实践

实验一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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档