微型计算机汇编语言程序设计
8086汇编语言程序设计——第一个程序
8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。
Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。
学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。
汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。
执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
微机原理与汇编程序设计复习题
微机原理与汇编程序设计复习题微机系统与汇编语言复习题单项选择题10某2=20分填空题10某2=20分问答题:5某5=25分程序分析题4某5=20分设计应用题1某15=15分第一章微型计算机概述答:微型计算机系统是以微型计算机为主体,配上软件系统和外部设备而构成的。
第二章计算机中的数据表示1.58的非压缩BCD和压缩BCD各如何表示?写出存入D某的指令。
答:58的非压缩BCD是0508H存入D某的指令:MOVD某,0508H58的压缩BCD和是58H存入D某的指令:MOVD某,0058H2、什么是ASCII码?可表示哪些信息?按其作用可分为哪些?答:ASCII码是美国信息交换标准代码的简称,用于给西文字符编码。
包括英文字母的大小写、数字、专用字符、控制字符等;按其作用可分为:34个控制字符;10个阿拉伯数字52个英文大小写字母;32个专用符号第三章80某86微处理器及其体系结构1、8086CPU信号线RESET的功能是什么?8086复位后内部寄存器状态是怎样的?8086CPU复位后从什么单元中取第一条指令执行。
答:RESET—复位信号输入8086复位后CS=FFFFH、DS=0000H、ES=0000H、SS=0000H、IP=0000H、FR=0000H8086CPU复位后从CS某10H+IP=FFFFH某10H+0000H=FFFF0H地址单元中取第一条指令执行启动系统。
CS:IP=FFFF:0000H2、已知一个SRAM芯片的容量为8K某8和64K某8,地址线、数据线各为多少?答:SRAM芯片的容量为8K某8:地址线13条,数据线8条SRAM芯片的容量为64K某8:地址线16条、数据线8条3、指令指针寄存器IP多少位?有何功能?答:IP是一个16位的寄存器,存放EU要执行的下一条指令的偏移地址,用以控制程序中指令的执行顺序,实现对代码段指令的跟踪4、8086CPU用于地址锁存器输入允许的控制信号和用于数据收发器允许的控制信号各是什么信号?答:用于地址锁存器输入允许的控制信号是ALE,用于数据收发器允许的控制信号是DEN5、是什么引脚?答:等待测试引脚6、INTA是什么引脚?答:中断响应引脚7、M/IO是什么引脚?答:存储器访问/输入输出访问控制引脚8、8086CPU最小、最大方式时用于总线请求、允许的信号线各是什么?答:最小:HOLD---总线请求HLDA---总线响应最大:RQ/GT0、RQ/GT19、8086CPU访问存贮器和访问I/O的地址分别各为什么?可寻址的最大存贮器空间和最大I/O空间分别各为多少?答:8086CPU访问存贮器的地址是A19—A0,可寻址的最大存贮器空间是1MB.8086CPU访问I/O的地址是A15—A0,可寻址的最大I/O空间是64KB.10、什么是逻辑地址?什么是物理地址?它们各自如何表示?如何转换?答:程序中使用的存储器地址称为逻辑地址,由16位“段基址”和16位“偏移地址”(段内地址)组成。
学习龙芯汇编语言程序设计
第四篇,在 C 语言中嵌入汇编。
在 C 语言中直接使用机器指令。
第五篇,介绍一些指令(一般的指令直接看手册,只介绍需要注意的)
联机分时系统
六十年代末七十年代初最热的技术之一是联机分时系统。在这之前,程序员要使用计算机一 般是使用穿孔卡片或穿孔纸带,然后是排队,轮到后,独自占用。往往编译出错,便要把计 算机让给别人用,修改后,再排队,重复上面的过程。随着计算机的内存不断增大和速度不 断提高,技术人员就研究出了让多个用户分享一台计算机的办法。不但程序员获益(编辑, 编译,运行,好象独占一台电脑),商业用户也可以用来远程访问联机的数据库,这让计算 机的应用大为扩展,象银行异地处理业务,飞机订票管理这样的应用也可以实现了。专业厂 家的系统都很昂贵,而且和专有的硬件结合在一起,一般用户无法很便宜地获得。这些分时 系统有的使用字符终端,有的使用电传打字机(出于成本考虑,比终端便宜)。
在 UNIX 开发出来后,由于可移植,各种新开发的,更便宜的硬件上也能提供联机分时服务 了。
后来分时技术不断改进,现在已经有了基于网络的远程登陆,比如论坛大侠 lyxmoo 在拿到 龙芯盒子之后,慷慨提供 SSH 服务,让没有盒子的朋友们也能体验一下使用龙芯的感受。
以前提供分时服务的计算机,属于大型机(速度约每秒一百万次)。
通用寄存器$31还是处理器硬件约定的 JAL 指令的链接寄存器。(JALR 可以使用任何一个 通用寄存器)。通用寄存器$0,它的值恒为零。
由于 MIPS 采用将比较运算的结果放入任意一个指定的通用寄存器,所以龙芯没有整数比较 运算结果的标志寄存器(浮点运算使用状态寄存器的一个状态位)。
指令说明:
move 目的寄存器,源寄存器,表示把源寄存器的值传送至“目的寄存器”
030731004《微机原理与汇编语言》教学大纲
《微机原理与汇编语言》课程教学大纲课程代码:030731004课程英文名称:Computer Principles and Assembly Language课程总学时: 56 讲课: 44 实验:12适用专业:电子信息科学与技术大纲编写(修订)时间:2010一、大纲使用说明(一)、课程地位及教学目标本课程是电子信息科学与技术专业的必修的专业基础课,主要任务是使学生掌握8088/8086系列汇编程序设计和PC机硬件原理知识,并具有一定的应用能力。
(二)、知识,能力及技能方面的基本要求通过本课程学习,要求学生从理论上和实践上掌握计算机的基本组成、工作原理、硬件的连接等内容,会编写较简单的汇编语言程序,并能利用PC总线进行I/O扩展及编程,建立微机系统的整体概念,使学生具有应用微机系统软硬件开发的初步能力,为后续课程单片机、数字系统设计、ARM等打下理论基础。
(三)、实施说明由于本课程是主要专业基础课,对先修课基础要求较高,在讲授具体内容时,应注重基础原理内容和实际应用介绍,使学生在掌握基本原理的基础上,具有一定解决实际问题的能力。
要提高学生的基本素质和应用能力,必须改变传统的教学手段。
要利用多媒体授课;增加自学讨论部分,使学生从被动吸收知识的状态下,转化到主动索取知识的状态中来。
同时,应不断增加新知识。
总学时:56学时;讲课:44学时;实验:12学时。
(四)、对习题,实验,实践环节的要求本大纲立足于实施素质教育为目标培养的。
习题从教材中选取,按时交作业,编程习题尽量上机验证。
实验强调应用性,学生应独立完成,实验前预习实验内容。
(五)、对先修课程的要求1.计算机导论课程中的计算机数的编码,二、十六进制,BCD,ASCII码;2.数字电子技术课程中的逻辑电路基础。
(六)、考核方式及成绩评定方式1.考核方式:考试。
2.考试方法:闭卷。
3.课程总成绩:最终理论考试与平时考核(包括实验、期中考试、作业、出勤、提问等)的总和。
第4章 汇编 语言程序设计
DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处 NOP
HERE:SJMP
HERE
上述4个字段应该遵守的基本语法规则如下。
10
1.标号字段
语句所在地址的标志符号,才能被访问。如标号 “START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由1~8个ASCII码字符组成,第一个字符必须是
8
汇编语言语句是符合典型的汇编语言的四分段格式:
标号字段 (LABLE) 操作码字段 (OPCODE) 操作数字段 (OPRAND) 注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔;
操作数字段和注释字段之间的分界符用分号“;”。
表示的机器语言程序,才能识别和执行。
完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得 到的以“0”、“1”代码形式表示的机器语言程序称为目标 程序。
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。 2.高级语言
功能是把P1.6的位地址赋给变量QA。
4.2
汇编语言源程序的汇编
“汇编”?汇编可分为手工汇编和机器汇编两类。
22
4.2.1
手工汇编
通过查指令的机器代码表(表3-2),逐个把助记符指令 “翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出 错,只有小程序或受条件限制时才使用。实际中,多采用“ 汇 编程序”来自动完成汇编。
16
重叠。例如:
ORG …… ORG …… ORG …… 2000H 2500H 3000H
汇编语言实现用16位乘法指令完成32位无符号数乘法
汇编语⾔实现⽤16位乘法指令完成32位⽆符号数乘法《微型计算机原理与接⼝技术》实验报告⼀、程序设计题⽬⼀三⼗⼆位⽆符号乘法1 设计分析:(1)程序设计任务:⽤⼗六位乘法指令完成三⼗⼆位⽆符号数乘法(结果64位)。
使⽤MUL指令,完成双字⽆符号数乘法程序,要求乘数和被乘数从键盘输⼊,结果显⽰于屏幕上。
(2)程序设计要求:1)从键盘输⼊两个乘数(⼗六进制)2)结果显⽰于屏幕上(⼗六进制)(3)程序设计过程:1) 定义数据段⽤于开辟缓冲区存储输⼊数据、输出数据和乘积。
2)从键盘分别输⼊两个⼋位数字符(三⼗⼆字节)存⼊缓冲区(分4次输⼊,每次输⼊4个字符,前两次为被乘数的⾼位与低位,后两次为乘数的⾼位与低位)3)对缓冲区输⼊的字符进⾏处理,让Ascal码转换为数值本⾝的数值。
4)把三⼗⼆位分割成两位⼗六位,分别对其进⾏⼗六位的乘法。
5)将四个⼗六位乘法的乘积按照各⾃的位相加的最终乘积6)对所得结果进⾏处理,让Ascal码转换为数值本⾝的数值7)将结果向屏幕输出。
2、算法(⼀个框代表16位2进制数)3、X2 X1y1P+6 p+4 p+2 p4、程序流程图:5、测试数据与运⾏结果:输⼊被乘数的⾼位的4个字符X2:输⼊被乘数的低位的4个字符X1:输⼊乘数的⾼位的4个字符y2:输⼊乘数的低位的4个字符y1:运⾏结果:6、程序源代码及注解:ddata segmenty1 dw 16 dup(?)y2 dw 16 dup(?)p dw 30 dup(?)keybuf db 10 dup(?)ddata ends ;定义数据段ccode segmentassume cs:ccode,ds:ddatastart:mov ax,ddatamov ds,axmov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4shr ax,4mov dh,almov ah,[bx+4]mov al,[bx+5]shl al,4shr ax,4mov dl,almov x2,dx ;输⼊被乘数的⾼位的4个字符x2 mov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4mov ah,[bx+4]mov al,[bx+5]shl al,4shr ax,4mov dl,almov x1,dx ;输⼊被乘数的低位的4个字符x1 mov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4shr ax,4mov dh,almov ah,[bx+4]mov al,[bx+5]shl al,4shr ax,4mov dl,almov y2,dx ;输⼊乘数的⾼位的4个字符y2 mov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4shr ax,4mov dh,almov ah,[bx+4]mov dl,almov y1,dx ;输⼊乘数的低位的4个字符y1mov ax,x1mov dx,y1mul dxmov [p],axmov [p+2],dx ;被乘数低位4字符x1和乘数低位4字符y1相乘结果低位存⼊p,⾼位存⼊p+2mov ax,x2mov dx,y1mul dxadd [p+2],axadc [p+4],dx ;被乘数⾼位4字符x2和乘数低位4字符y1相乘结果低位存⼊p+2,⾼位存⼊p+4mov ax,x1mov dx,y2mul dxadd [p+2],axadc [p+4],dxadc [p+6],0 ;被乘数低位4个字符x1和乘数⾼位4个字符y2相乘结果低位存⼊p+2,⾼位存⼊p+4mov ax,x2mov dx,y2mul dxadd [p+4],axadc [p+6],dx ;被乘数⾼位4个字符x2和乘数⾼位4个字符y2相乘结果低位存⼊p+4,⾼位存⼊p+6mov al,byte ptr p+7 ;输出call dispalmov al,byte ptr p+6call dispalmov al,byte ptr p+5mov al,byte ptr p+3call dispalmov al,byte ptr p+2call dispalmov al,byte ptr p+1call dispalmov al,byte ptr pcall dispalmov ah,4chint 21hdispal proc ;⼦程序屏幕输出过程push cxpush dxpush axmov cl,4shr al,clor al,30hcmp al,3ahjb br1add al,7BR1: mov dl,almov ah,2int 21hpop axand al,0fhor al,30hcmp al,3ahjb br2add al,7br2: mov dl,almov ah,2int 21hretdispal endpccode endsend start题⽬⼆递归调⽤⼦程序设计1、设计分析:(1)程序设计任务:有n个⼈坐在⼀起,第n个⼈⽐第n-1个⼈⼤h岁。
汇编语言程序设计试题和答案
《汇编语言程序设计》试题专业姓名成绩一、单项选择题(每1分,共15分).1将下列二进制数0111,1111,1111 转换为16进制数和10进制数是()A.07FFH 3021DB. 6FEH 1021DC. 07FFH 2012DD. 07FFH 2047D2. 在1BM Pc机的IN和OUT 指令中,I/o端口号通常是由Dx寄存器来提供的,但有时也可以在指令中用一个字节来表示端口号。
试问可以直接由指令指定的I/o端口号有多少个?( )A. 127DB.255DC. 256DD.128D3. 设MYDAT是一个字变量,下列指令中,错误的是()A.MOV BX,10100BB.MOV DS,AXC.ADD BX,[10100H]D.MOV BX,MYDAT[SI]4.设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(20202)=0B7H,(21203)=65H,试指出:MOV AX,1100h[BX]指令执行后,AX寄存器内是()A.5678HB.4C2AHC.2A4CHD.7856H5.一台微型计算机的字长为16位,如果采用字节编址,那么它可以访问的最大存储空间是多少字节( ),试用16进制数表示该机的地址范围()A.1M 0~FFFFFHB.64K 0~FFFFHC.128K 0~FFFFHD.128K –FFH~FFH6. 如果在一个程序段开始执行之前,(cs)=0A7F0H,(1P)=2B40H,试问该程序段的第一个字的物理地址是()A.BAA40HB.AAB40HC.AAA40HD.0D603H7.下列指令哪个是错误的(设OP1,OP2 是已经用DB定义的变量名)( )A.CMP BL,OP1B.MOV [BX],111001BC. INC OP2D.SAR AX,CL8.假定(DX)=10111001B,(CL)=05,(CF)=1试确定:RCL DL,CL 指令执行后,DX中的值是()A.00CEHB.009DHC.00B9HD.003BH9. 有符号定义语句如下:BUFF DB 1,2,3,‘123’EBUFF DB 0L EQU EBUFF - BUFF问L的值为多少( )A.6DB.7DC.3DD.5D.10. IBMPC机中下列那些寄存器可以用来存储存储器地址()A、BX,BP,SP,CXB、AX,SI,DI,DXC、BX,SI,DI,SPD、DX,SI,DI,SP11.下列指令中正确的是()A.MOV [BX],[SI]B.MOV AX,[SI][DI]C.MOV BX,OFFSET NAME[SI]D.MOV BYTE PTR [100],10012下列程序段执行后,寄存器BX中的内容是什么()MOV CL , 3MOV BX , 0B7HROL BX , 1RCR BX , CLA、0EDHB、0DEHC、0CDHD、0CCH13JB指令的测试条件是( )A. CF=0B. CF=1 C .OF∨CF=1 D.OF=114在DEBUG中()命令用来汇编一句汇编语言语句15 A 、A B、U C 、E D、D16. 指令STI 的功能是( )17(A)允许中断(B)不允许中断(C)允许单步(D) 不允许单步二.不定项选择题,漏错多选不得分。
第5章 习题及答案
第五章 汇编语言程序设计1、画图说明下列语句所分配的存储器空间及初始化的数据值。
难度:2(1) BYTE_VAR DB ‘BYTE’,12,-12H ,3 DUP(0,2 DUP(1,2),7) (2) WORD_VAR DW 3 DUP(0,1,2),7,-5,’BY’,’TE’,256H 答:(1) (2)07H BYTE_V AR 42H WORD_V AR 00H 00H 59H 00H FBH 54H 01H FFH 45H 00H 59H 0CH 02H 42H EEH 00H 45H 00H 00H 54H 01H 00H 56H 02H 01H 02H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H07H00H2、假设程序中的数据定义如下: PARTNO DW ?PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为22,它表示当前已分配单元空间。
《微型计算机原理》第5章习题与解答3、有符号定义语句如下:难度:2BUF DB 1,2,3,’123’EBUF DB 0L EQU EBUF-BUF问:L的值是多少?答:L的值为6;4、假设成序中的数据定义如下:难度:2LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址存入BX。
(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3)写一条伪指令定义符使CODE_LENGTH的值等于 CODE_LIST域的实际长度。
汇编语言程序设计习题答案
第一章微型计算机系统概述1.3习题与综合练习1.解释和区别下列名词术语(1)微处理器(MP):具有中央处理器功能的大规模集成电路器件微型计算机(MC)微型计算机系统(MCS)(2)硬件:硬件是计算机系统的躯体,由控制器,运算器,存储器,输入设备,输出设备5大部分组成。
软件:软件是计算机的头脑和灵魂,可分为系统软件和应用软件。
(3)字节:8位二进制是一个字节。
字:16位二进制构成一个字。
字长:计算机的运算部件能同时处理的二进制数据的位数。
(4)指令指针:存放BIU要取的下一条指令的偏移地址。
指令寄存器:指令译码器:状态寄存器:(5)存储单元:存储内容:存储地址:存储容量:(6)RAM:ROM:软件固化:2.冯·诺依曼计算机结构的特点是什么?(1)采用二进制数的形式表示数据和指令。
(2)将指令和数据存放在存储器中。
(3) 计算机硬件由控制器,运算器,存储器,输入设备和输出设备5大部分组成。
3.件数计算机系统中复杂指令集和精简指令集的特点和用途。
复杂指令集(CISC):在微型计算机的体系结构组成结构上是以复杂指令为设计的计算机,在指令的运行过程中按指令的复杂程度来指挥计算机完成各条指令,由于各条指令复杂程度不同分配的时钟周期各不相同,执行指令所需时间就不相同。
CISC体系的指令集由微程序来实现,即每一个操作由若干微操作的程序组合来实现。
所以CISC可以使用微指令编程的方式实现多种和功能复杂的指令。
精简指令系统(RISC):不管计算机的指令如何复杂,在一个计算机时钟周期内完成,计算速度快,指令集简单。
每一条指令直接有硬布线实现,即它的每条指令原则上有自己的一套逻辑时序电路直接实现,所以单条指令的实现所占用的硬件资源较多。
因为该体系没有能采用增加单条指令的功能或高位的指令语义,也没有增加指令的条数,而是集中于它的精简指令集上。
4.CPU是计算机系统中的重要部件,试说明CPU的结构和功能。
微处理器是计算机中最关键的部件,由控制器,运算器,寄存器组和辅助部件组成。
微机原理实验讲义(电子14级)
第一部分汇编语言程序设计实验一汇编语言程序设计基础[实验目的]1.学习和掌握汇编语言程序的基本结构和上机过程。
2.学习和掌握顺序程序设计的方法3.学习和掌握汇编语言程序的调试方法。
4.学习EMU8086和MASM FOR WINDOWS软件的使用。
[实验要求]1、上机前要做好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。
2、上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与试验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序)的使用方法。
在程序的调试过程中,有意识的学习及掌握程序的各种操作命令以便掌握程序的调试方法及技巧。
[实验器材]微型计算机、WINDOWS操作系统、DOS系统、DEBUG程序、MASM 5.0[实验内容]1.编写程序,在屏幕上分行显示自己的姓名、学号和欢迎信息,每个信息显示在不同的行。
2.编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
3.在数据段定义x、y、res1、res2、res3、res4,分别计算x和y的和、差、积、商,分别存放在变量res1、res2、res3、res4中,变换不同的x和y的值,进行计算,分析和记录计算结果以及相关标志位的状态。
验证程序是否正确。
4.在数据段定义x、y、res1、res2、res3、res4,分别计算x和y的与、或、非、异或的结果,分别存放在变量res1、res2、res3、res4中,变换不同的x和y的值,进行计算,分析和记录计算结果以及相关标志位的状态。
验证程序是否正确。
5.将字节型变量x和y交换。
[实验步骤]1.编辑源程序。
(注意:保存文件时文件的扩展名必须为.asm,最好将文件保存在自己的文件夹下)。
2.汇编源程序,应用MASM.EXE对源程序进行汇编,生成.obj的目标文件和.lst的列表文件,通过列表文件查看并记录其中一个程序的目标代码。
3.连接目标程序,应用LINK.EXE对目标模块进行连接,生成 .EXE的可执行文件,执行可执行文件,验证程序功能。
汇编语言程序设计的实验环境及上机步骤
汇编语言程序设计的实验环境及上机步骤一、实验环境汇编语言程序设计的实验环境如下:1.硬件环境微型计算机(Intel x86系列CPU)一台2.软件环境⏹Windows98/2000/XP操作系统⏹任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)⏹汇编程序(MASM.EXE或TASM.EXE)⏹连接程序(LINK.EXE或TLINK.EXE)⏹调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。
二、上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。
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的编辑窗口,如图1所示。
图1 文本编辑器EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
汇编语言程序设计教程(第3版 卜艳萍)参考答案
汇编语言程序设计教程(第3版卜艳萍)参考答案汇编语言程序设计教程(第3版)习题参考答案第1章汇编语言基础知识思考与练习1. 计算机系统分哪几个层次?简述计算机系统的硬件结构。
1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。
它由控制器、运算器、存储器、输入设备和输出设备等部件构成。
2. 简述用汇编语言进行程序设计的必要性。
1) 程序要具有较快的执行时间,或者只能占用较小的存储容量。
例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。
2) 程序与计算机硬件密切相关,程序要直接、有效地控制硬件。
例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。
3) 大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态连接库等。
4) 没有合适的高级语言或只能采用汇编语言的时候。
例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。
5) 汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。
3. 汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。
1) 为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。
目前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。
2) 汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。
无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。
3) 汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。
4) 字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。
计时器汇编语言程序设计
目录1设计要求 (1)1.1初始条件 (1)1.2设计任务 (1)2总体方案论证 (2)2.1方案一 (2)2.2方案二 (2)2.3方案论证 (2)3程序流程图 (3)3.1主程序流程图 (3)3.2中断服务子程序流程图 (3)4.程序设计步骤 (6)4.1界面设置 (6)4.2检验键盘状态 (6)4.3中断子程序 (7)4.4判断计时进位 (8)4.5暂停与继续计时 (9)5程序调试说明与分析 (10)5.1初始界面 (10)5.2按下S键开始计时界面 (10)5.3按下P键暂停计时界面 (10)5.4按下G键继续计时界面 (11)5.5按下C键清零界面 (11)5.6按下ESC键退出 (12)6心得体会 (12)参考文献 (14)附件(程序清单) (15)计时器汇编语言程序设计1设计要求1.1初始条件➢采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;➢软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
1.2设计任务➢设计汇编语言程序,实现计时功能,具体功能要求如下:(1)设计一个计时器界面,形式为:时:分:秒;(2)单击“S”或“s”键开始计时,单击“P”或“p”停止计时,单击“G”或“g”键继续计时,单击“C”或“c”键清0;(3)单击”ESC”键退出程序。
(2)单击”ESC”键退出程序。
根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试。
2总体方案论证2.1方案一利用8155芯片设计一个具有时、分、秒显示的电子时钟,启动按键,数码管从初始设置的时间开始显示。
从设计要求可知,需要键盘扫描部分,时间控制部分,初始值设置部分,数码管显示部分,延时部分。
时间走动部分的实现:各个时钟的个位部分逢十进一,秒和分钟的十位部分是逢六进一。
当时的十位达到2时,个位为4时,程序跳到清零部分,程序从零开始计时。
数码管显示部分的功能是实现时、分、秒的显示,可以用六个数码管从左至右一次显示时间,采用分配存储单元的形式,地址从低到高分别显示秒、分、时。
汇编语言程序设计实验篇(emu8086)
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
实验五汇编语言程序设计实验(一)
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
微型计算机原理-第5章(2)微机原理与接口技术(第三版)(王忠民)
DS、
INT
ES
数2…0据H
PSP(256 字节)
附段加
CSS:SPSIP定义了代 堆段段段堆码栈栈段的用程用序户
户程序装入情况
第5章 汇编语言程序设计
DSEG SEGMENT STRING1 DB 1,2,3,4,5
DSEG ENDS ESEG SEGMENT
STRING2 DB 5 DUP(?) ESEG ENDS SSEG SEGMENT
CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备
上机过程
第5章 汇编语言程序设计
编辑程序 编辑
汇编程序 汇编
连接程序 连接
手写程序
EDIT .ASM文件
MASM .OBJ文件
LINK .EXE文件
有语法错误 无法正常连接 有算法错误
第5章 汇编语言程序设计
用户程序的装入
完成以下操作: 确定内存可用部分 以便存放要执行的 .exe 文
INC
BX
ADD AL,[BX]
MOV SUM,AL
RET
ENDP CODE END
MAIN
ENDS START
第5章 汇编语言程序设计 第二讲结束
每一种知识都需要努力, 都需要付出,感谢支持!
知识就是力量,感谢支持!
一一一一谢谢大家!!
STACK‘STACK’ DW 10 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME ES:ESEG,SS:SSEG
START: MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX
LEA SI, STRING1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CX≠0且 ZF=1? CX≠0且 ZF=0?
LOOPNZ指令: CX-1→CX
否:顺序执行
是:转移 JCXZ指令: CX=0? 否:顺序执行
18
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
பைடு நூலகம்
循环控制转移指令的使用
MOV CX,10 (其它初始条件)
NXT:(循环执行的指令)
功能:从栈顶弹出 1 个字(段内返回)或 2 个字(段间返 回),作为返回地址(即断点)给IP或CS:IP;SP相应加2 或加4。 指令后跟 8位立即数,用以在恢复断点后,在现行 SP值上 再加此数,以释放相应数目的堆栈空间。
是偶数,为 什么?
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 24
段内短-近转移指令机器码及操作
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 6
无条件转移指令JMP
▲段内间接转移指令 指令格式:JMP 16位寄存器/ 字存储器单元
• 寄存器间接寻址:有效地址存放在寄存器中;
• 存储单元间接寻址:有效地址存放在存储单元中; • 要计算出存储单元的物理地址,再从该地址处取一个字 送到IP
注意: 指令的目的操作数前要加说明符DWORD PTR。
第 2章 微型计算机指令系统 16:25 9
第2节 8086/8088指令系统
无条件转移指令JMP
▲段间间接转移指令
【例】JMP DWORD PTR[SI十0125H]
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
无条件转移指令JMP
1. 格式:JMP 操作数(目标地址)
2. 操作数(目标地址)的给出方式 段内直接给出:例如 JMP BRCH1 段内间接给出:例如 JMP AX 段间直接给出:例如 JMP BRCH 段 间 间 接 给 出 : 例 如 JMP [DI+1200H] DWORD PTR
功能:按照不同的操作数给出方式,找出目标地址, 用它代替原指令指针。可实现全部存储空间内的转 移。
值范围-128~ +127;
转移时,仅改变IP寄存器的内容,段地址CS的值不变。
远转移(far):段间转移,目标地址与正常顺序的IP值
不在同一个代码段内。 转移时,CS和IP的值都要改变 近转移、短转移采用特殊的“相对寻址方式”来获得转移的 目标地址。
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 2
3.作用:实现对存储单元的读/写操作。
第 2章 微型计算机指令系统 16:25 第1节 8086的寻址方式 1
控制转移指令概述
控制转移指令可实现三种范围的跳转:
近转移(near):段内转移,相对偏移量为1个字,取值
范围 -32768~ +32767;
短转移( short ):段内转移,相对偏移量为 1 字节,取
第2节 8086/8088指令系统
13
判断无符号数大小的指令
JA/JNBE JAE/JNB JB/JNAE JBE/JNA ;目操作数>源操作数则转移 ;目操作数≥ 源操作数则转移 ;目操作数< 源操作数则转移 ;目操作数≤ 源操作数则转移
通常用在CMP指令之后;由指令自动选择不同 标志位,进行不同条件的判断。
的标志位和判断条件。与无符号数不同!
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 15
第 2章 微型计算机指令系统 16:25
16
循环控制指令
1. 格式: LOOP 短标号 LOOPZ/LOOPE 短标号
LOOPNZ/LOOPNE 短标号
JCXZ 短标号
2. 寻址方式:相对寻址,只能实现短转移。
LOOP NXT (退出循环后的处理) MOV CX,10 (其它初始条件) NXT:DEC CX JCXZ LAST
(循环执行的指令)
JMP NXT LAST:(退出循环后的处理)
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 19
CALL指令执行的操作
过程:程序中能完成特定功能而又独立的模块,也称子程序。 过程嵌套:在过程运行中又去调用另一个过程。 过程调用和返回指令的格式:CALL 过程名 RET 近过程调用:调用指令CALL和被调用的过程在同一代码段中。 远过程调用:两者在不同代码段中。
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
7
无条件转移指令JMP
▲段间直接(远)转移指令 指令格式:JMP FAR 标号
特点: 用远标号直接给出了转向的段地址和偏移量,即 IP������ CS������ ������ ������ 标号的段内偏移量 标号所在段的段地址
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
20
过程调用及返回
主程序
CALL
子程序调用 断点
子程序
主程序的调用实质上是一
种强制改变正常指令指针顺序
的过程,调用之前的正常 IP 值
返回主程序
RET
称为“断点”。
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
正常执行序列 中断处理程序
INT n
(n)×4 中断指令或中断请求 断点 中断返回 n号中断 向量 偏移量 段基址 (n)×4 (n)×4+1 (n)×4+2 (n)×4+3
n=255号 中断向量
偏移量 段基址
003FCH 003FDH 003FEH 003FFH
第 2章 微型计算机指令系统 16:25
10
控制转移指令概述
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
11
条件转移指令的特点
格式: 指令助记符 目标地址(短标号)
功能:根据当前各标志位状态进行判断,如果
满足指令所指定的条件,则转移至目标地址处;
否则顺序执行。
转移范围:短转移,即相对位移量是一个8位的
带符号数(-128~+127)。
IRET类似于远返回的RET。
过程调用不保护Flags。因此,INT、IRET指令与栈顶3个
SP+2;再从个字栈中弹出一个字 ������ SP十2。
CS,并使SP ������
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
25
有关中断的基本概念
中断向量表 00000H 偏移量 n=0号 00001H 中断向量 00002H 段基址 00003H 00004H 偏移量 n=1号 00005H 中断向量 00006H 段基址 00007H
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
8
无条件转移指令JMP
▲段间间接转移指令 指令格式:JMP DWORD PTR [存储单元] 特点: 目的地址的段地址和偏移量放在存储器中的4个连续地址 单元中:前两个字节为偏移量;后两个字节为段地址。指令
中给出存放目标地址的存储单元的首字节地址值;
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 5
无条件转移指令JMP
▲段内近/短转移指令的机器码及其操作功能如下图所示。
������ ������ 其中第一个字节为操作码,后面的字节是位移量。 ������ ������ 注意:8位的位移量与IP相加时,用符号扩展法扩展成 16位后再相加。
过程返回指令RET
从栈中弹出返回地址,使程序返回主程序继续执行。
这里分为两种情况:
如果从近过程返回:从栈中弹出一个字������ ������ IP,并
且使SP ������
������
SP+2
������ IP,
如果从远过程返回:先从栈中弹出一个字������ 并且使SP ������ ������ ������ ������
执行中断 处理程序
返回 断点处
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
27
中断与调用的比较
INT与CALL指令的断点都是下一条指令的地址。
INT、IRET、CALL、RET指令本身都不影响任何标志。 中断指令对指令指针CS:IP的修改,类似于实现段间转移 的 CALL指令;只是 CALL还可以实现段内转移。同样,
3. 功能:根据CX的值和ZF标志判断是否转移。 4. 指令本身不影响ZF!
第 2章 微型计算机指令系统 16:25 第2节 8086/8088指令系统 17
循环控制指令
LOOP指令: CX-1→CX CX≠0? 是:转移 否:顺序执行 是:转移 否:顺序执行 是:转移
LOOPZ指令: CX-1→CX
第2节 8086/8088指令系统
26
中断及中断返回指令
中断调用指令:INT n ;n —中段类型码
中断返回指令:IRET
功能:实现对n号中断的服务程序的调用及返回。 执行过程:
中断调 用过程: Flags、CS、 IP依次入栈 IF=0, 关闭中断 中断返回: IP、CS、Flags 依次出栈 用n×4索引 中断向量表 取中断向量 赋给CS:IP
第 2章 微型计算机指令系统 16:25
第2节 8086/8088指令系统
22
CALL指令执行的操作
可实现的转移 执行过程
段内直 近转移——目标地址 SP减2,断点(原IP值)入栈 接/间 与控制转移指令位于 用目标地址( 16 位操作数的 接给出 同一代码段内 值)代替原IP值