汇编语言程序设计(一)
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,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
大工14 秋《汇编语言程序设计》在线测试1答案
大工14 秋《汇编语言程序设计》在线测试1
单选题判断题多选题
一、单选题(共10 道试题,共30 分。
)
1. 下面的数值表示中,和127相等的是哪一个()
A. 11111111B
B. 127H
C. 80H
D. 7FH
正确答案:D
2. 在IBM PC中,一个字为()位二进制数。
A. 8位
B. 16位
C. 32位
D. 64位
正确答案:B
3. 一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是()
A. 12CSBH
B. 12B6BH
C. 12C59H#12BFEH
正确答案:C
4. 8086CPU在执行8位有符号数运算后,产生溢出是结果超出了:()
A. 0~255
B. +128~-128
C. +255~-256
D. +127~-128
正确答案:D
5. 已知物理地址(371F0H)=12H,(371F1H)=34H,(371F2H)=56H,如从地址371F0H 中取出一个字的内容是()
A. 3412H
B. 3421
C. 3410H
D. 3424
正确答案:A
6. CPU要访问的某一存储单元的实际地址称()
A. 段地址
B. 偏移地址
C. 物理地址
D. 逻辑地址。
ch4-1汇编语言程序设计(伪指令)
由汇编程序执行的“指令系统” 用于定义变量、分配存储区、定义逻辑段、
指示程序开始和结束等 在汇编时被解释执行,不产生任何目标代码
常用伪指令分类
数据定义伪指令 符号定义伪指令 段定义伪指令 过程定义伪指令 宏命令伪指令 结束伪指令
第四章 汇编语言程序设计
第四章 汇编语言程序设计
data SEGMENT
名字 Hello DB ‘Hello, world!’,0DH,0AH,’$’
data ENDS prog SEGMENT
伪指令
ASSUME CS:prog ,DS:data
start: MOV AX,data
MOV DS,AX
标号
LEA DX,hello
MOV AH,9
INT 21H 指令码 MOV AH,4CH
NUM:ADD AL,30H
RET
第四章 汇编语言程序设计
2.汇编语言与高级语言
• 汇编语言是一种依赖于计算机微处理器的语言 • 汇编语言一般不具有通用性和可移植性 • 进行汇编语言程序设计必须熟悉机器的硬件资
源和软件资源 • 高级语言是面向过程的语言 • 高级语言具有很好的通用性和可移植性
第四章 汇编语言程序设计
INT 21H
prog ENDS
操作数
END start
(4)操作数
常量 变量或标号 表达式 寄存器 存储器单元
第四章 汇编语言程序设计
第四章 汇编语言程序设计
表达式: 算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出
注意:
名字和标号: 标号后有冒号,在指令性语句前;名字后不加
《汇编语言程序设计》第1次作业
一、单项选择题(只有一个选项正确,共10道小题)1.十进制数-100的8位二进制数的补码为()。
(A) 10011100(B)11100100(C) 11001110(D) 011001002.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。
(A) 无符号十进制数136(B) 压缩型BCD码十进制数88(C) 8位二进制数-8的补码表示(D) 带符号十进制数-1203.指令MOV AX,[BX][SI]中源操作数采用的寻址方式是()。
(A) 寄存器(B) 基址变址(C) 寄存器间接(D) 寄存器相对4.下面有语法错误的指令是( )。
(A) ADD [BP+2],DA1(DA1是变量名)(B) ADD [BX+3],AL(C) ADD AL,AH(D) ADD AH,[DI]5.在DEBUG上机调试程序时,存储器地址表示为12FA:015F,它的物理地址是( )(A) 12FAH(B) 1305FH(C) 015FH(D) 130FFH6.下列指令中,执行后,不改变标志位ZF的是()。
(A) AND AL,AL(B) TEST AL,0FFH(C) CMP AL,BL(D) ROR AL,CL7.DATA SEGMENTDA1 DB 32 DUP(?)DA2 DW 1456H,789AHDA3 DW DA2DATA ENDS…MOV BX, DA3上述指令执行后,BX中的内容是( )。
(A) 0031H(B) 0032H(C) 0020H(D) 0021H8.完成将累加器AX清零,下面错误的指令是()。
(A) OR AX,00H(B) AND AX,00H(C) XOR AX,AX(D) SUB AX,AX9.数据段有如下数据定义VAR DB 4 DUP(1,5 DUP(?)),1,2执行指令MOV AL,SIZE VAR后AX寄存器的值是多少()。
(A) 4(B) 1(C) 5(D) 2010.内存中(2000H)=3000H,(3000H)=A01FH,MOV BX,[2000H]MOV AX,[BX]执行上述指令AX的内容是()。
汇编语言程序设计
第四章汇编语言程序设计(assembly languageprogramming)§4.1 汇编语言(assembly language)一.概述汇编语言:一种符号语言,它用助记符表示指令的操作码和操作数,用标号或符号代表地址、常量和变量,与机器语言几乎一一对应汇编语言程序:用汇编语言编写的程序汇编:把汇编语言源程序翻译成机器语言目标程序的过程汇编语言源程序手工汇编或汇编程序机器语言目标程序汇编程序:用来完成汇编工作的程序,有小汇编ASM宏汇编MASM动态调试程序DEBUG二.汇编语言的语句格式: [名称] 指令助记符 [操作数] [;注释]带方括号的项有时可没有,注释项完全可以没有每个部分用空格分开每行最多可有132个字符,但最好不要超过屏宽80语句可分成指令性语句和指示性语句(伪指令语句)指令性语句汇编后可生成机器码[标号:] 指令助记符 [操作数] [;注释]指示性语句指示汇编程序处理一些工作[名称] 伪指令(指示符) [操作数] [;注释]1.名称(或称标识符)给指令或存储单元地址起的名字,由字母、数字、字符组成字母:A~Z ,a~z数字:0~9字符:可打印+-*/=()[]〈〉;.' ’ ,_:?@$&(非打印空格制表符TAB 回车换行)(界符:,;:.()[]〈〉+-*/=?_@&$' ’界符用来表示某个标志的结束)数字不能作名称的第一个字符,圆点.仅能作第一个字符保留字不能作标识符($、?是保留字,与其它字符组合除外)名称最长为31个字符当名称后跟冒号,表示该名称是其后指令的标号,代表该指令的开始地址,其他指令可以用该标号作为转移地址当名称不跟冒号,它可能是标号或变量名,伪指令前的名称不跟冒号冒号隐含NEAR属性,例:供段内调用写成 OUTPUT:OUT DX ,AL供段间调用写成 OUTPUT OUT DX ,AL2.指令助记符8086/8088指令,也可以是伪指令,如果指令有前缀(LOCK、REP等)则前缀和指令用空格分开3.操作数指令执行的对象,可能有一、二个或没有名称指令助记符操作数注释RET ;返回(无操作数)COUNT: INC CX ;CX加1(1个操作数)MOV AL,BL ;ALBL(2个操作数)伪指令可有多个操作数COST DB 3,4,5,6,7,8 ;(6个操作数,用逗号分开)操作数可以是常数、寄存器名、标号、变量、表达式,MOV AX,[BP+4];(第二个操作数为表达式)4.注释可选项,使程序易读,汇编时不作处理注释前面要加分号,它可位于操作数之后,也可位于行首三.常量与变量1.常量,也叫常数,没有属性的纯数,汇编时已确定的值·数字常量为0~65535中的数(16位寄存器使用,伪操作可定义32位),进制加后缀说明,十进制加D(可省),二进制加B,八进制加Q,十六进制加H,若十六进制第一位为字母,则前头应加0·字符和字符串叫串常量,是ASCII码字符串,必须加单(或双)引号例:‘A’,“ABC”,汇编后变成41H,414243H2.变量,用于表达数值(或串)的标识符,有三个属性① 段属性(SEGMENT)② 偏移地址属性(OFFSET)③ 类型属性(TYPE),用DB、DW、DD定义§4.2 伪指令(pseudo-instruction)一.符号定义伪指令1.等值EQU格式:符号名 EQU 表达式用来给符号定义一个值,程序中出现该符号就用其值代替,EQU只能定义一次DATA EQU 1234 ;代表一个数XYZ EQU ALPHA[SI] ;代表一个地址2.等号 =格式:符号名 = 表达式意义与EQU一样,但程序中可重新定义符号的值EMP = 6 ;EMP代表6EMP =EMP + 1 ;EMP现在代表73.解除PURGE格式:PURGE 符号名(符号1,符号2,……,符号n)用于解除所定义的符号使该符号在以后的定义中有效例:原定义 TAB EQU 5可用 PURGE TAB 来解除然后可重新定义 TAB EQU 10二.数据定义伪指令用于预置存储器或定义变量1.定义字节DB格式:[变量名称] DB 表达式例:DATA1 DB 2,3,4,5;从DATA1单元开始存放4字节数据2.定义字DW格式:[变量名称] DW 表达式例:TAB DW 1234H;TAB单元内容为34H,TAB+1单元内容为12H 3.定义双字DD格式:[变量名称] DD 表达式每个数据二字(四字节)低位部分在低地址,高位部分在高地址·用DB/DW/DD定义的数每行不得超过16项,超过16项必须换行DB/DW/DD用法<1> SUM DB ? ;给SUM单元分配一个字节,内容未定<2> TAB DB 20 DUP(0);给TAB开始单元分配20字节,内容为0<3> TIME DW 100 DUP(?);给TIME开始单元分配100字,内容未定<4> ADDR DD TABLE ;TABLE的地址(双字)给ADDR例:DATA SEGMENTORG 100HTABLE DB 1,2,3,4ADDR DD TABLEDATA ENDS假设汇编后DS=13A2H(如果ADDR用DW定义,只得偏移量)(如果TABLE是变量,ADDR得地址,是常量,ADDR得数值)<5> LETTER DB ‘ABCDEFG’;将字符串以ASCII码形式填入LETTER开始的内存<6> HIS DB 3 DUP(‘WELCOME!’,0DH,0AH);从HIS单元开始重复3次存放WELCOME!和回车换行符4.标号LABEL格式:标号名 LEBEL 类型标号用于说明可执行代码在汇编语言程序中的位置,即符号地址,供调用和转移之用标号有三个属性段属性偏移量属性距离属性(即格式中的类型):NEAR(近程)和FAR(远程)NEAR:本标号为段内标号,调用本标号只提供偏移地址,段基址为当前代码段FAR:本标号为段间标号,调用本标号提供偏移地址和段基址一个具有NEAR属性的标号也可用标号加冒号作后缀,并排列在代码行的开头来隐含如 AGAIN LABEL NEARXOR AX,BUFF[BX]可写成 AGAIN:XOR AX,BUFF[BX]例:ROOT LABEL NEAR ;以下程序所用的ROOT标号是段内属性COMP PROC NEAR ;以下程序所用的过程下的标号是段内属性TIME PROC FAR ;以下程序所用的过程下的标号是段间属性三.运算符1.算术运算符+、-、*、/、MOD即加、减、乘、除、除法取余数(如19 MOD 7=5)操作数是数字,结果也是数字存储器地址运算时只有加减,例TAB+2、BETA-5等2.逻辑运算符AND、OR、XOR、NOT即与、或、异或、非操作数是数字,结果也是数字例:AND BX,DAT AND 0FEH3.关系算符EQ、NE、LT、GT、LE、GE即相等、不等、小于、大于、小于等于、大于等于若关系是假结果为0,若关系是真结果为0FFFFH例:MOV BX,PAD LT 3则PAD的值小于3时,汇编成MOV BX,0FFFFH否则,汇编成MOV BX,04.分析运算符可把存储器操作数分解成它的组成部分,如段值、段内偏移量、类型5.合成算符由已存在的存储器操作数生成一个段值与偏移量相同,而类型不同的新的存储器操作数以下讨论分析算符和合成算符1.取段基址SEG它加于一个变量或标号之前,回送段基址,例:ASSUME CS:SEG BEGIN ;令CS为BEGIN程序段段基址MOV AX,SEG VARN ;将VARN的段基址送AX2.取偏移量OFFSET它加于一个变量或标号之前,取其偏移量,例:MOV BX,OFFSET SUM ;将SUM的段内偏移量存入BX3.取类型码TYPE它加于一个变量或标号之前,取其类型代码DB DW DD DQ DT NEAR FAR1 2 4 8 10 -1 -2例:NG1 DB ‘A’,‘D’,3NG2 DW 88,265……MOV AL,TYPE NG1 ;NG1定义字节,AL 1MOV AL,TYPE NG2 ;NG2定义字,AL 24.取长度LENGTH它加于一个变量之前,取分配给变量的项数例:TAB DB 150 DUP(?);150项,150字节FUM DW 150 DUP(?);150项,300字节则,MOV CX,LENGTH TAB ;CX 150MOV AX,LENGTH FUM ;AX 150·注意:LENGTH返回的存储区必须用DUP()来定义,否则返回为1 5.取字节数SIZE它加于一个变量之前,取回变量所占字节总数,有SIZE = LENGTH * TYPE由上例,LENGTH TAB = 150,TYPE TAB = 1LENGTH FUM = 150,TYPE FUM = 2可知: SIZE TAB = 150SIZE FUM = 300以上5个叫数值返回算符6.类型指示PTR格式:类型 PTR 地址表达式表示PTR右边的(存储器)操作数是左边的类型,有:BYTE、WORD、DWORD、NEAR、FAR例:INC BYTE PTR [BX] ;将BX指向的单元字节加1MOV WORD PTR [DI],99 ;立即数99送DI指向的字中JMP NEAR PTR FOK ;以近程方式跳转到FOK(只取FOK偏移地址)7.指定符THIS(合成算符)用于定义当前所指单元中的类型格式:THIS 类型/距离经THIS定义过的标号具有当前汇编段、偏移量和所规定的类型或距离等属性,例:FOOB EQU THIS BYTE;下面的字类型变量FOOW在这里指定为字节型FOOBFOOW DW 120 DUP(?)定义后,对同一数据块(FOOB和FOOW有相同的段和段内偏移量)有两种类型访问FOOB时为字节操作,访问FOOW时为字操作ADD AL,FOOB[3] ;将数组第四字节与AL相加MOV AX,FOOW[4]将数组第五六字节组成的字送AX也可以这样来构成FOOB:FOOB EQU BYTE PTR FOOW又例:DATAF EQU THIS FARDATAN:MOV AX,FOO这时 JMP DATAN为近程转移JMP DATAF为远程转移8.段修改符:用于对某一地址表达式指定临时段基址,如MOV AX,ES:[BX];指定ES为BX的段基址,对当前指令有效9.短程符SHORT与NEAR、FAR功能类似,位移量一字节范围 -128~+127,对应一条短转移指令例:JMP SHORT LAB;转移到标号LAB的地址10.方括号 [ ]表示操作数(加方括号)是一个地址偏移量,不是数值格式:[表达式] 或者 [表达式][ ]例:MOV [BX],AX ;将AX内容送BX所指单元MOV [BX+7],AX ;将AX内容送BX+7所指单元MOV AX,[BX][SI] ;将BX+SI所指单元内容送AX11.取高/低字节HIGH/LOW用来分离常量的高/低字节,对存储器操作数无效例:DATA EQU 789AHMOV AL,HIGH DATA ;AL=78HMOV AL,LOW DATA ;AL=9AH四.段定义伪指令1.SEGMENT—ENDS格式:[段名] SEGMENT [定位类型] [组合类型] [‘类别名’]┇[段名] ENDS·段名·定位类型(Align),给出实际段地点的种类或段长度的信息<1> PARA 段起始地址从一个节(paragraph)的边界开始<2> BYTE 段地址可从任意绝对地址开始<3> WORD 段地址从任意一个字的边界开始<4> PAGE 段地址从某一页的边界开始(一页等于256字节)<5> INPAG 段长度小于一页未说明定位类型时则默认为PARA·组合类型(Combine),又称联合类型,程序中各程序段的连接和定位方法<1> PUBLIC 将段名相同的程序段(亦称模块)依此紧密连接,但彼此不相互覆盖<2> COMMON将段名相同的程序段连接,各段都从同一地址开始<3> AT表达式段定位在由表达式(结果必须是常数)所指定的节的边界上例:AT 1234H,则段地址被定位在物理地址为12340H处,如果希望从12345H开始,则在SEGMENT命令的下一行写上ORG 5AT 不能向前引用<4>STACK 表示这个段是运行期间的堆栈段<5>MEMORY 该段是相互连接的几个段中地址最高的段<6>NONE本段与其他段无组合关系未说明联合类型时则默认为NONE,不和别的段连接·‘类别名’(Class),也叫组名,加单引号,汇编后类别名相同的程序段代码集中在一起定位,形成一个统一的物理段,类别名可自定,约定的有CODE (代码段)、DATA(数据段)、STACK(堆栈段)、CONST(常数)、MEMORY(存储)等2.ASSUME段寄存器说明伪指令,指明所定义的段名所使用的段寄存器(告诉汇编程序在运行期间通过哪一个段寄存器寻址才能找到所要的指令和数据),本语句一般在定义的代码段中第一条出现格式:ASSUME 段寄存器:段名 [,…]例: ASSUME CS:CODE,DS:DATA ;用SEGMENT—ENDS定义ASSUME CS:SEG KGF,DS:SEG BEGIN;由算符定义ASSUME ES:NOTHING ;用关键字定义,表示不使用ES(取消ES段寄存器)(保留字NOTHING在这里作为一个段名参数,ASSUME NOTHING表示取消所有段寄存器,各个段寄存器只能在指令性语句中由MOV指令赋值)·ASSUME只是设定段寄存器与逻辑段的对应关系,并没给段寄存器装入实际值,所以程序中必须对DS、ES、SS赋值,而CS由系统赋值3.ORG定点伪指令(段内定位),用以确定下一条指令(或变量)在当前段中的偏移地址格式:ORG 表达式表达式以65536(64K)为模计算,超过64K则取其余数本语句前未定义过的变量不可出现在表达式中,表达式可包含$(程序计数器当前值)如:ORG OFFSET $+1000表达式必须为正值,若为负值,就会从当前段的地址高端开始表达式最好不要写成OFFSET $-1000,以免把汇编过的1000个字节覆盖掉ORG指令不能带标识符,如START:ORG 0和SKIP ORG 100都是错的例:CODE SEGMENT ;段起始ORG 100H ;本程序代码从偏移地址100H开始装入ASSUME CS:CODE ;装入代码段地址到CS中START:IN AL,30H ;程序段SHL AL,1OUT 32H,ALJMP STARTCODE ENDS ;程序段结束END START ;汇编结束例:DATA SEGMENTORG 50HDAT DW 1,2,$+1┇DATA ENDS注意DAT不能定义为字节,否则与$不匹配五.过程定义伪指令格式:过程名 PROC 属性┇过程体RET过程名 ENDP·过程名不可缺省,它和标号一样有三个属性:段属性、偏移地址属性、距离属性·距离属性在PROC后指定,有NEAR和FAR,如果希望过程能让别的程序调用,则必须是FAR属性·一个过程允许多个入口,入口处有标号,标号要说明距离属性例:延时100ms子程序DELAY PROC ;隐含NEARMOV BL,10 4TDLY1: MOV CX,2801 ;内循环延时10ms 10TWAIT0: LOOP WAIT0 9/5T DEC BL 2TJNZ DLY1 8/4TRET 8TDELAY ENDP六.结束伪指令·NAME:给模块(源程序)命名格式:NAME 模块名称它出现在源程序的最前端·END:汇编结束格式:END [标号名]它通知汇编程序本模块汇编到此结束标号名是可选项,若选取,应指向执行本程序的起始地址若一个源程序是多模块,只有主模块的END后加标号,子模块只有END七.宏指令宏指令:在汇编语言源程序中多次重复出现的程序段,用一个名字来定义,然后当成一条指令来使用宏汇编:源程序中的宏指令经汇编程序翻译后扩展成对应程序段的机器码宏指令用MACRO—ENDM来定义,如:CRLF MACROMOV DL,0DHMOV AH,02HINT 21H┇ENDM(CRLF作回车换行)§4.3 汇编语言程序设计(assembly language programming)一.设计要求1.程序简明、易读、易调试、易修改2.程序占用内存要少(包括程序长度及运行时所需空间)3.程序运行速度要快二.基本设计方法1.选择合适的计算方法2.绘制程序流程图3.编制程序4.上机调试三.汇编语言程序格式和基本结构一般一个完整的汇编语言程序至少应包括以下三个程序段简化段格式:.MODEL SMALL.STACK 64H.DATA……;紧接指令代码从偶地址开始存放.CODESTART: MOV AX,@DATAMOV DS,AX……END STARTDATA SEGMENT ‘DATA’┇数据段DATA ENDSSTACK SEGMENT ‘STACK’┇堆栈段STACK ENDSCODE SEGMENT ‘CODE’ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX┇代码段CODE ENDSEND START程序的基本结构分为顺序结构、分支结构、循环结构和子程序结构(一)顺序结构一种简单程序,按顺序执行例1.将200H单元的低4位和高4位分别送入201H和202H单元的低4位,这二单元的高4位清0200HX X201H 0202H 0DATA SEGMENTORG 200HBCD DB 47HDB 2 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACK MOV SS,AXMOV AX,TOPMOV SP,AXMOV BX,OFFSET BCD MOV AL,[BX]AND AL,0FHMOV [BX+1],AL MOV AL,[BX]MOV CL,4ROL AL,CLAND AL,0FHMOV [BX+2],AL HLTCODE ENDS END START例2.将ADDR1和ADDR2两单元开始的二个16位无符号数相加,考虑到进位,将其结果存放在SUM开始的三个单元中DATA SEGMNETADDR1 DW 7854HADDR2 DW 9981HSUM DB 3 DUP(0)DATA ENDSSATCK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,ADDR1ADD AX,ADDR2MOV WORD PTR SUM,AXADC SUM+2,0HLTCODE ENDSEND START例3.查表将DATA1单元中字节类型数据(0~0FH)转换成ASCII码,并存入ASCII单元中DATA SEGMENTASCTAB DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HDATA1 DB 09HASCII DB ?DATA ENDSSTACK SEGMENT STACKDW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARASCTAB 30 031 1┇93941 A42 B┇46 F┇ASCIIPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET ASCTABMOV AL,DATA1XLATMOV ASCII,ALRETSTART ENDPCODE ENDSEND START例4.将200H和201H单元字节的高4位对调,低4位不变CODE SEGMENT200H201HORG 200HDATA1 DB 0F3H,47HASSUME CS:CODE,DS:CODESTART:MOV AX,CODEMOV DS,AXMOV CL,4MOV AX,WORD PTR DATA1 ;AX=47F3HROL AX,CL ;AX=7F34H ROL AH,CL ;AX=F734H ROL AL,CL ;AX=F743H MOV WORD PTR DATA1,AXHLTCODE ENDSEND START(二)分支结构通过判断产生分支,借助于条件转移指令跳转到相应的分支地址执行分支程序分支程序由三部分组成① 测试部分,负责产生决定分支的条件② 定向部分,根据测试条件是否满足,决定程序是否分支③ 标注部分,标明分支的去向利用跳转表也可使程序转移到分支地址例1.16位二进制补码X在DATA1单元,求其绝对值送DATA2单元(设X≠8000H)∣X∣= X,X≥0-X, X<0DATA SEGMENTDATA1 DW 9F87HDATA2 DW ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,DATA1AND AX,AXJNS ABS0NEG AXABS0: MOV DATA2,AXHLTCODE ENDSEND START例2.多重分支学生成绩按分数段划分为:A、90~100(5AH~64H)B、80~89 (50H~59H)C、70~79 (46H~4FH)D、60~69 (3CH~45H)E、 <60 ( <3CH)已知分数存放在MARK单元,请用ASCII码的A、B、C、D、E去代表MARK单元中的分数所属的段,并存于GRADE单元DATA SEGMENTMARK DB 81GRADE DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET MARKMOV AL,[BX]CMP AL,3CHJC LPECMP AL,46HJC LPDCMP AL,50HJC LPCCMP AL,5AHJC LPBMOV AL,41H ;‘A’JMP SHORT DONELPB: MOV AL,42H ;‘B’JMP SHORT DONELPC: MOV AL,43H ;‘C’JMP SHORT DONELPD: MOV AL,44H ;‘D’JMP SHORT DONELPE: MOV AL,45H ;‘E’DONE: MOV BX,OFFSET GRADE MOV [BX],ALHLTCODE ENDSEND START法2:直接查表转换(顺序结构)DATA SEGMENTTAB DB ‘EEEEEEDCBAA’MARK DB 81GRADE DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET TABMOV AL,MARKMOV AH,0MOV CL,10DIV CLXLATMOV GRADE,ALHLTCODE ENDSEND START(三)循环结构使机器重复执行一系列指令,是一种闭合的分支结构循环程序由四部分组成① 初始化部分(或预置部分),负责设置循环初值② 处理部分,循环过程的主体③ 控制部分,修改初值,判断是否循环循环次数由一计数器控制循环次数由某一指定条件是否满足来决定④ 结束部分,处理循环程序的最后结果例1.将DTAB单元开始的一组字节补码数(≤255个)求平均值,结果存入AVE单元,若结果为负,在SYM置FFH否则置0DATA SEGMENTDTAB DB 0FDH,0FCH,05H,0F8H,……DB 08H,25H,83H,97H,……COUNT EQU $-DTABAVE DB ?SYM DB ?DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK AVER PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA BX,DTABMOV CX,COUNTXOR DX,DXNEXT: MOV AL,[BX]CBWADD DX,AXINC BXLOOP NEXTMOV AX,DX MOV CL,COUNTIDIV CLMOV AVE,ALMOV SYM,0AND AL,ALJNS DONEMOV SYM,0FFHDONE: RETAVER ENDPCODE ENDSEND START循环控制方法:循环次数由计数器控制例2.将8位二进制小数规格化设需规格化的小数在DATA1单元,要求规格化后使其最高位为1,并存入DATA2单元,办法是把小数左移至最高为位为1为止,左移次数存入DATA3单元,若小数是0,则在DATA2和DATA3单元存入0示例:DATA1 DATA2 DATA322H 88H 02H01H 80H 07HCBH CBH 00H00H 00H 00HDATA SEGMENTDATA1 DB 22HDATA2 DB ?DATA3 DB ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CL,0MOV AL,DATA1 ;取数AND AL,AL ;设ZF、SF标志JZ DONECHKSF:JS DONEINC CLADD AL,AL ;左移一位JMP SHORT CHKSFDONE: MOV DATA2,ALMOV DATA3,CLHLTCODE ENDSEND START循环控制方法:循环次数由某一指定条件是否满足来决定例3.多重循环将n个无符号字节数从小到大排序,方法是依此比较相邻两单元的数,若前小后大不交换第一轮比较n-1次,最大数沉底(高地址)第二轮比较n-2次,次大数沉到最大数上面第n-1轮比较完若在某一轮比较时没有出现交换,说明顺序已排好,不必后续比较,故设交换标志AH=1代表不交换,AH=2代表有交换DATA SEGMENTLIST DB 18,6,11,3,1,2,3,9,8,7,6 DB 111,110,99,112,115,114,113,98,96,97 COUNT EQU $-LISTDATA ENDSSTACK SEGMENT STACKSTA DW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSET PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV DX,COUNT-1 ;n-1轮(外循环)EXGO:MOV CX,DX ;每轮次数(内循环)MOV AH,01H ;交换标志MOV BX,OFFSET LIST ;数据块首址INGO: MOV AL,[BX]INC BXCMP AL,[BX]JC NEXT ;数1小,不交换XCHG AL,[BX] ;数1>数2,交换DEC BXXCHG AL,[BX]INC BX ;恢复数据指针MOV AH,02H ;有交换标志NEXT: LOOP INGODEC DXJZ DONEDEC AHJNZ EXGODONE: RETSET ENDPCODE ENDSEND START(四)子程序结构基本要求:① 子程序的开始(入口处)应给予一个标号,结束处有返回指令② 通用子程序要说明入口条件(入口参数)和出口条件(出口参数)③ 调用子程序要注意保护现场和恢复现场调用—返回的堆栈操作:CALL target ;段内SPSP-2,[SP+1,SP] IP,IPIP+disp段间SPSP-2,[SP+1,SP] CS,CSsegSPSP-2,[SP+1,SP] IP,IPoffsetRET ;段内IP [SP+1,SP],SPSP+2;段间IP [SP+1,SP],SPSP+2CS [SP+1,SP],SPSP+2RET n ;如上操作后SPSP+n·子程序入口标号应说明距离属性·对于一个FAR过程,过程初必须先保护程序段前缀中的中断指令INT 20H 的断点地址(DS:0000),它是一个程序正常结束退出的中断处理程序例1.将内存200H单元开始的一个五字节十六进制数显示出来(低位在低地址)DATA SEGMENTORG 200HNUM DB 9AH,78H,56H,34H,12HDATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV BX,5MOV AX,STACKMOV SS,AXMOV SP,TOPMOV SI,OFFSET NUMNEXT: MOV DH,[SI+BX-1] ;(不用AL,因调用MOV DL,DH ; display返回时DL→AL)MOV CL,4ROL DL,CLAND DL,0FHCALL DISPLAYMOV DL,DHAND DL,0FHCALL DISPLAYDEC BXJNZ NEXTMOV AX,4C00HINT 21HDISPLAY PROC NEARADD DL,30HCMP DL,3AHJB OKADD DL,07H;(如果DL=3AH,3AH+7=41H是‘A’)OK: MOV AH,02HINT 21HRET。
汇编语言程序设计 第一二三阶段在线作业
第一次在线作业单选题 (共40道题)∙A、BX或CX∙B、CX或SI∙C、DX或SI∙D、SI或DI我的答案:D 此题得分:2.5分∙A、数据段中偏移量为3236H的字节∙B、附加段中偏移量为3234H的字节∙C、数据段中偏移量为3234H的字节∙D、附加段中偏移量为3236H的字节我的答案:A 此题得分:2.5分∙A、上一条指令的首地址∙B、下一条指令的首地址∙C、正在执行指令的首地址∙D、需计算有效地址后才能确定地址我的答案:B 此题得分:2.5分4.(2.5分)某系列微机对存储器的分段,如果每一个段最多的字存储单元(16位二进制)是32K,那∙A、20位∙B、16位∙C、15位∙D、12位我的答案:B 此题得分:2.5分∙A、AX,BX,CX,DX∙B、DS,ES,CS,SS∙C、SP,BP,IP,BX∙D、SI,DI,BP,BX我的答案:D 此题得分:2.5分6.(2.5分)要求将A,B两个字符的ASCⅡ码41H,42H顺序存放在连续两个字存储单元中,可选用∙A、DA1 D B ‘AB’∙B、DA1 DW ‘AB’∙C、DA1 B ABH∙D、DA1 W ABH我的答案:A 此题得分:2.5分∙A、DB 5H∙B、DW ABCDH∙C、DW ‘ABCD’∙D、DD ‘AB’我的答案:C 此题得分:2.5分∙A、通用寄存器∙B、堆栈∙C、程序计数器∙D、主存单元我的答案:D 此题得分:2.5分∙A、变址寻址∙B、寄存器寻址∙C、相对寻址∙D、寄存器间接寻址我的答案:D 此题得分:2.5分∙A、85B92H∙B、86192H∙C、BB690H∙D、12169H我的答案:A 此题得分:2.5分∙A、AX,BX,CX,DX∙B、BX,BP,SI,DI∙C、SP,IP,BP,DX∙D、CS,DS,ES,SS我的答案:B 此题得分:2.5分12.(2.5分)BUF DW 10H DUP(3 DUP(2,10H),3,5) 上述语句汇编后,为变量BUF分配的存∙A、80H∙B、100H∙C、124∙D、192我的答案:B 此题得分:2.5分∙A、物理地址∙B、偏移地址∙C、逻辑地址∙D、段地址我的答案:A 此题得分:2.5分∙A、字∙B、双字∙C、字节∙D、四字我的答案:C 此题得分:2.5分∙A、符号∙B、变量∙C、助记符∙D、标号我的答案:B 此题得分:2.5分∙A、DATA1 DW 1856H∙B、DATA1 DB 18H,56H∙C、DATA1 EQU 5618H∙D、DATA1 DB 18H,00H,56H,00H我的答案:B 此题得分:2.5分17.(2.5分)计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码,目前,微∙A、BCD码∙B、二进制码∙C、ASCII码∙D、十六进制码我的答案:C 此题得分:2.5分18.(2.5分)假设存储器中从7462H单元开始的四个相邻字节单元中的内容依次是32H,46H,52H,∙A、7462H∙B、7463H∙C、7464H∙D、7465H我的答案:C 此题得分:2.5分∙A、08090H∙B、08089H∙C、0808EH∙D、08450H我的答案:A 此题得分:2.5分∙A、16*SS+SP∙B、16*SS+BP∙C、16*DS+BP∙D、16*CS+BP我的答案:A 此题得分:2.5分∙A、16*SS+BP+DI∙B、16*ES+BP+DI∙C、16*DS+BP+DI∙D、16*CS+BP+DI我的答案:A 此题得分:2.5分22.(2.5分)一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一∙A、12C5BH∙B、12B6BH∙C、12C59H∙D、12BFEH我的答案:C 此题得分:2.5分∙A、2345H∙B、12345H∙C、12340H∙D、1234H我的答案:D 此题得分:2.5分∙A、变址寻址∙B、寄存器寻址∙C、相对寻址∙D、寄存器间接寻址我的答案:D 此题得分:2.5分∙A、DB 20 DUP(?)∙B、DW 20H DUP(?)∙C、DB 10H DUP(4 DUP(?))∙D、DD 08H DUP(?)我的答案:D 此题得分:2.5分∙A、BX∙B、BP∙C、SI∙D、DI我的答案:B 此题得分:2.5分∙A、ZF=1∙B、ZF=0∙C、SF=l∙D、SF=0我的答案:A 此题得分:2.5分∙A、304FH∙B、304EH∙C、3048H∙D、3049H我的答案:B 此题得分:2.5分∙A、185A2H∙B、00020H∙C、01004H∙D、0AB568H我的答案:B 此题得分:2.5分∙A、.64K个字∙B、32K个字节∙C、64K个字节∙D、.1兆个字节我的答案:C 此题得分:2.5分∙A、DIV 2∙B、DIV DX,2∙C、SAR DX,1∙D、SHL DX,1我的答案:C 此题得分:2.5分∙A、BX或CX∙B、CX或SI∙C、DX或SI∙D、SI或DI我的答案:D 此题得分:2.5分∙A、TEST AL,02H ∙B、OR AL,AL∙C、CMP AL,BL∙D、AND AL,BL我的答案:D 此题得分:2.5分∙A、CMP∙B、SUB∙C、AND∙D、MOV我的答案:D 此题得分:2.5分∙A、XCHG AX,DS∙B、XCHG BL,[BX]∙C、XCHG AL,OFH ∙D、XCHG[SI],[DI]我的答案:B 此题得分:2.5分∙A、ADD BH,01H ∙B、OR BH,01H∙C、XOR BH,01H ∙D、TEST BH,01H 我的答案:B 此题得分:2.5分∙A、NOT AL∙B、AND AL,0FH ∙C、XOR AL,0FH ∙D、OR AL,0FH我的答案:C 此题得分:2.5分∙A、SHR AX,1∙B、SHL AX,1∙C、ROL AX,1∙D、RCR AX,1我的答案:B 此题得分:2.5分39.(2.5分)ORG 0030HDA1 DB 0,‘0’,30HDW DA1数据为3000H字存储单元的偏移地址是:∙A、0030H∙B、0031H∙C、0032H∙D、0033H我的答案:A 此题得分:2.5分40.(2.5分)BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是:∙A、80H∙B、100H∙C、124∙D、192我的答案:B 此题得分:2.5分-------------------------------------------------分割-----------------------------------------------------第二次在线作业单选题 (共30道题)∙A、对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令∙B、对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令∙C、对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令∙D、对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令我的答案:C 此题得分:2.5分∙A、MOV AL,[BX+SI]∙B、JMP SHORT DONING∙C、DEC [BX]∙D、MUL CL我的答案:C 此题得分:2.5分∙A、外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内∙B、外循环初值应置外循环之内;内循环初值应置内循环之内∙C、内、外循环初值都应置外循环之外∙D、内、外循环初值都应置内循环之外,外循环之内我的答案:A 此题得分:2.5分∙A、ZF=0∙B、CF=0∙C、ZF=1∙D、CF=1我的答案:A 此题得分:2.5分∙A、ADD BUF1,BUF2∙B、JMP DWORD PTR DAT [BX]∙C、MOV AX,[BX+DI] NUM∙D、TEST AL,08H我的答案:A 此题得分:2.5分∙A、JMP NEXT∙B、JC NEXT∙C、INC BX∙D、SHL AX,1我的答案:D 此题得分:2.5分∙A、目标程序∙B、源程序∙C、可执行程序∙D、汇编程序我的答案:B 此题得分:2.5分∙A、XCHG AX,[BX][SI]∙B、MOV AX,[BX+SI]∙C、LEA AX,BX[SI]∙D、LEA AX,[BX][SI]我的答案:D 此题得分:2.5分∙A、1FFFH∙B、1998H∙C、2002H∙D、1FFEH我的答案:D 此题得分:2.5分∙A、把源操作数的符号位扩展到目的操作数中∙B、把AL中的符号位扩展到AH中∙C、把AH中的符号位扩展到AL中∙D、把AX中的符号位扩展到DX中我的答案:B 此题得分:2.5分∙A、CX=0,且ZF=0∙B、CX=0,或ZF=1∙C、CX≠0,且ZF=0∙D、CX≠0,或ZF=1我的答案:B 此题得分:2.5分∙A、MOV CS,AX∙B、MOV DS,AX∙C、MOV SS,AX∙D、MOV ES,AX我的答案:A 此题得分:2.5分∙A、MOV BX,VAR∙B、LDS BX,VAR∙C、LES BX,VAR∙D、LEA BX,VAR我的答案:D 此题得分:2.5分∙A、3211H∙B、320EH∙C、320FH∙D、3212H我的答案:B 此题得分:2.5分15.(2.5分)汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省∙A、名字项∙B、操作项∙C、操作数项∙D、注释项我的答案:B 此题得分:2.5分∙A、伪指令∙B、指令∙C、标号∙D、助记符我的答案:B 此题得分:2.5分∙A、1400H∙B、77F8H∙C、0000H∙D、0FFFFH我的答案:A 此题得分:2.5分∙A、XCHG AX,DS∙B、XCHG AX,[BX]∙C、XCHG AX,CSH∙D、XCHG[SI],[DX]我的答案:B 此题得分:2.5分19.(2.5分)设数据段有:DA1 DB XX ;是任一数据DA2 DB OFEH 下列两条指令:MOV DL,∙A、.0FFH或0FEH∙B、只能是0FEH∙C、只能是0FFH∙D、只能是01H我的答案:A 此题得分:2.5分20.(2.5分)ORG 100H NUM EQU 8042H DA1 DB 56H MOV BX,0FFSET DA1 上述程序段∙A、56H∙B、100H∙C、101H∙D、102H我的答案:B 此题得分:2.5分∙A、段内转移直接寻址∙B、段内转移间接寻址∙C、段间转移直接寻址∙D、段间转移间接寻址我的答案:C 此题得分:2.5分∙A、DIV 2∙B、DIV DX,2∙C、SAR DX,1∙D、SHL DX,1我的答案:C 此题得分:2.5分∙A、指令XOR AX,AX执行后,AX内容不变,但设置了标志位∙B、指令OR DX,1000H执行后,将DX最高位置1,其余各位置0∙C、指令AND AX,OFH执行后,分离出AL低四位∙D、NOT AX,执行后,将AX清0我的答案:C 此题得分:2.5分∙A、ROL CL,1 ROL CL,1∙B、MUL 4∙C、SHL CL,1 SHL CL,1∙D、MOV CL,2 SHL CL,CL我的答案:C 此题得分:2.5分∙A、MOV [DI],[SI]∙B、MOV [DX+DI],AL∙C、MOV WORD PTR [BX],0100H ∙D、MOV AL,BX我的答案:C 此题得分:2.5分∙A、ZF=1∙B、ZF=0∙C、SF=1∙D、SF=0我的答案:A 此题得分:2.5分∙A、MOV [BX+SI],BX∙B、MOV CL,[BP+DI]∙C、MOV CS,AX∙D、MOV DS,AX我的答案:C 此题得分:2.5分∙A、AL=57H,BL=24H∙B、AL=33H,BL=24H∙C、AL=57H,BL=33H∙D、AL=33H,BL=0我的答案:B 此题得分:2.5分∙A、0FFH∙B、80H∙C、00H∙D、0FEH我的答案:A 此题得分:2.5分30.(2.5分)已知BX=028AH,SI=0294H,(DS:051EH)=5432H。
《汇编语言程序设计(1)》模拟试题一和答案
《汇编语言程序设计(1)》模拟试题一一、单项选择题(本大题共20个小题,每小题2分,共计40分)1、为了便于实现多级中断,保存现场信息最有效的方式是采用( )。
A、通用寄存器B、堆栈C、存储器D、寄存器2、8086CPU中有4个数据寄存器,其中AX除用作通用寄存器外,还可用作( )。
A、累加器B、计数器C、基址寄存器D、段寄存器3、如果(AL)=11111111B,执行INC AL指令后,CF= ( )。
A、1B、0C、2D、和执行INC AL指令之前的取值保持一致4、以下指令中,执行后要影响标志位的指令为( )。
A、MOV AL,BLB、LAHFC、CLCD、PUSHF5、在机器内部操作中,CPU与存储器之间的任何信息交换使用的都是( )。
A、逻辑地址B、物理地址C、有效地址D、相对地址6、用来表示堆栈指针的寄存器是( )。
A、IPB、BPC、SPD、SS7、8086CPU在基址加变址的寻址方式中,变址寄存器可以为()。
A、BX或CXB、CX或SIC、DX或SID、SI或DI8、如果当前(SP)=0058H,执行POP AX指令后,(SP)=( )。
A、60HB、56HC、59HD、5AH9、设DS=27FCH,某一数据存储单元的偏移地址为8640H,则数据存储单元的物理地址正确的是( )。
A、27FCHB、27FC0HC、8640HD、30600H10、PSW寄存器中共有( )位条件状态位,有( )位控制状态位。
A、6、3B、3、6C、8、4D、4、811、“与非”门中的某一个输入值为“0”,那么它的输出值( )。
A、为“0”B、为“1”C、取决于正逻辑还是负逻辑D、取决于其他输入端的值12、在段内寻址时,可以提供偏移地址的寄存器组是( )。
A、AX、BX、CX、DXB、BP、SS、IP、SIC、BX、BP、SI、DID、CS、DS、ES、SS13、为了便于实现多级中断,保存现场信息最有效的方式是采用( )。
汇编语言程序设计第1阶段测试题
汇编语⾔程序设计第1阶段测试题江南⼤学现代远程教育第⼀阶段测试卷A考试科⽬:《汇编语⾔程序设计》第1章⾄第3章(总分100分)时间:90分钟______________学习中⼼(教学点)批次:层次:专业:学号:⾝份证号:姓名:得分:⼀、单选题(每题2分,共22分)1.下列指令中,不正确的指令是。
A.MOV [BX+SI],AX B.MOV AX,[BX + SI]C.MOV AX,SI D.MOV AX,[BX + CX]2、下列传送指令中有语法错误的是A、MOV CS,AXB、MOV DS,AXC、MOV SS,AXD、MOV ES,AX3.表⽰⼀条处理器指令所在存储单元的符号地址是。
A.变量B.常量C.标号D.偏移量4.如代码段段名为COSE,它的起始地址为20A00H,程序开始执⾏的起始地址标号为START,对代码段寄存器CS赋值段地址值的⽅法是。
A.MOV CS,20A0HB.ASSUME CS:COSEC.END STARTD.MOV AX,COSEMOV CS,AX5.11000110B为⼀个数的⼆进制补码,该数的⼗进制原码为。
A.+198 B.-198 C.+58 D.-586、指令“MOV CX,[BP+16]”的源操作数采⽤的段寄存器为。
A.CS B.SSC.DS D.ES7.指令“MOV ES:[2000H],AX”中,⽬的操作数的寻址⽅式为。
A.⽴即数寻址B.寄存器寻址C.存储器直接寻址D.寄存器间接寻址8.若(DS)=1100H,(SS)=2200H,(BP)=100H,(DI)=200H,指令MOV AX,[BP+DI+5]中源操作数的有效地址EA为。
A.11305H B. 22305H C.305H D.33305H9.16位⼆进制补码表⽰为⼗进制数的范围是。
A.-32768D~32768D B.-32768D~32767DC.-32767D~32768D D.-32767D~32767D10、BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是A、80HB、100HC、124D、19211.在汇编语⾔程序中,对END语句的叙述正确的是。
实验一 汇编语言程序设计EMU8086基础实验
实验一汇编语言程序设计EMU8086基础实验1、实验目的和要求:了解使用EMU8086(8086汇编模拟工具)学习汇编的方法。
2、实验内容:编写汇编程序,计算2010H+2011H,并把和存入RESULT单元。
8086汇编模拟工具,结合了一个先进的原始编辑器、汇编器、反汇编器、具除错功能的软体模拟工具(虚拟 PC),还有一个循序渐进的指导工具。
这对刚开始学汇编语言的人会是一个很有用的工具。
它会在模拟器中一步一步的编译程式码并执行,视觉化的工作环境让它更容易使用。
你可以在程式执行当中检视暂存器、标志以及内存。
模拟器会在虚拟 PC 中执行程式,这可以隔绝你的程式,避免它去存取实际硬体,像硬盘、内存,而在虚拟机器上执行汇编程序,这可以让除错变得更加容易。
3、实验仪器与器材:计算机及EMU8086汇编软件等。
4、实验原理:自己总结5、实验过程与测试数据(含电路图/程序框图):A、打开EMU8086 v4.08软件,新建工程,选EXE模板,清屏,编写8086程序代码。
B、保存程序代码为*.asm文件,编译保存为可执行文件.exe,编译保存没有错误则模拟运行。
如果有错误返回修改。
运行有单步运行、全速运行等。
实验一参考程序DATA SEGMENTX DW 2010HY DW 2011HRESULT DW ?DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,XADD AX,YMOV RESULT,AXRETMAIN ENDPCODE ENDSEND START6、实验分析:自己分析7、实验体会自己总结。
实验五汇编语言程序设计实验(一)
实验五汇编语言程序设计实验(一)一、实验目的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 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
汇编语言编程实验报告
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。
)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。
4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。
如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。
一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。
将包含QE文件的工作磁盘插入驱动器A:。
进入QEA\QE进入全屏幕后可以开始编程。
文件名取为Myprog。
asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
汇编语言程序设计(第四版)第1~5章【课后答案】
第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU 需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
王庆生主编的汇编语言程序设计课后答案习题1详解
习题11.1把下列十进制数转换为二进制数和十六进制数。
(1)67 (2)34 (3)254 (4)123答:(1)67D=1000011B=43H(2)34D=100010B=22H(3)254D=11111110B=0feH(4)123D=1111011B=7bH1.2把下列二进制数转换为十六进制数和十进制数。
(1)01101101 (2)10110010 (3)111111答:(1)01101101B=6dH=109D(2)10110010B=0d2H=208D(3) 111111B=3fH=63D1.3作下列十六进制数的运算,并转换为十进制数校核。
(1)5a+64 (2)86-49 (3)123-9a (4)43*2b 答:(1) 5aH+64H=0beH90D+100D=190D正确(2)86H-49H=3dH134D-73D=61D正确(3)123H-9aH=89H291D-154D=137D正确(4)43H*2bH=0b3fH67D*43D=2881D正确1.4下列各数均为十进制数,请采用八位二进制补码运算,并回答标致寄存器flags中CF和OF的值,运算结果所代表的十进制数是多少?如果用十六进制补码运算,其结果所代表的十进制数是多少?FLAGS中CF和OF的值呢?(1)85+69 (2)85+(-69) (3)85-(-69) (3)85-(69)答:(1)八位二进制01010101+01000101=10011010=-102D CF=0,OF=1十六位二进制0000000001010101+0000000001000101=0000000010011010 =154DCF=0,OF=0(2)八位二进制01010101+10111011=00010000=16D CF=1,OF=0十六位二进制0000000001010101+1111111110111011=0000000000010000 =16DCF=1,OF=0(3)八位二进制01010101-10111011=10011010=-102D CF=1,OF=1十六位二进制0000000001010101-1111111110111011=0000000010011010 =154DCF=1,OF=0(4)八位二进制01010101-01000101=00010000=16D CF=0,OF=0十六位二进制0000000001010101-0000000001000101=0000000000010000 =16DCF=0,OF=01.5 实模式下,写出段地址和偏移地址为1234:2002、1430:0042、FF00:0FFF的物理地址。
汇编语言程序
方法三:采用同#0FH、#0F0H相与的方法分离 高低4位,将两个BCD数分开。 ORG 1000H MOV A,20H ANL A,#0FH ORL A,#30H MOV 22H,A MOV A,20H ANL A,#0F0H SWAP A ORL A,#30H MOV 21H,A;9条指令,17个字节,9个机 器周期;
第五章 汇编语言程序设计 1 程序设计方法 2 顺序程序 3 4 5 6 分支程序 循环程序 子程序 位操作程序
1、本章教学内容: (1)汇编应用概述 (2)简单程序设计 (3)分支程序 (4)循环程序 (5)查表程序 (6)子程序的设计及其调用
(7)位操作程序
2、本章基本要求 (1)掌握简单程序设计 (2)掌握分支和散转程序设计 (3)理解循环程序 (4)掌握简单查表程序 (5)掌握子程序的设计、位操作
程序
5-1-2 汇编语言程序设计步骤
一、 分析问题,建立数学模型。 二、确定算法:对待定问题求解步骤的一种描 述,是指令的有限集合,算法有五个特征: 有穷性、确定性、可行性、输入、输出 开始 三、制定程序流程图: 表示程序结构和程序功能
?
N
Y
1
四、编制源程序 1.确定数据结构:合理分配存储器单元和了 解I/O接口地址。 2.按功能设计,明确各程序之间关系。 3.用注释行说明程序。 生成一个ASCII码文件,扩展名为“.ASM”。
方法2 相对地址表PRGTBL:DB PRGi-PRGTBL 决定地址表长加分支处理程序长小于256B. 方法3:跳转表+散转指令 例 5 - 1 0 1 2 8 路 分 支 程 序 。 功 能 : 根 据 R3 的 值 (00H~7FH)转到128个目的地址。 参考程序:
JMPl28:MOV A,R3 RL A ;(A)×2 MOV DPTR,#PRGTBL ;散转表首址 JMP @A+DPTR ;散转 PRGTBL:AJMP ROUT00 AJMP ROUT01 … AJMP ROUT7F ;128个AJMP指令占 RORT00: … ROUT01 : … 注意:通过AJMP跳到各分支,限制分支程序入口 RORTi必须于对应AJMP指令在同一2KB范围。
汇编语言程序设计
一般分为两类:
条件转移指令 实现程序两路分支
无条件转移指令+ 跳转表 实现程序多路分支
? ? … case 1 case 2 case n case 1 case 2 case n
CASE 结构
(1)条件控制
IF-THEN-ELSE 结构
(2)逻辑尺控制
(3) 地址跳跃表(值与地址有对应关系的表)
Back
Next
Home
• AGAIN:ADD AL,[SI] • ADC AH,0 • INC SI • DEC CX • JNZ AGAIN ;循环累加 • MOV SUM,AX
Back
Next
Home
• 例:在给定个数的16 位数串中,找出大于零、等 于零和小于零的个数,并紧跟着原串存放。 • 分析:这是一个统计问题,须设定三个计数 器分别统计三种情况下的结果。程序如下: • DATA SEGMENT • BUFF DW X1,X2,X3,……,Xn • COUNT EQU $-BUFF ;此时,COUNT 的值为 BUFF 所占的字节数 • PLUSE DB ?
值,为使循环体正常工作而建立的初始状态等。
(2) 循环体。这是循环工作的主体,由循环
的工作部分和修改部分组成。循环的工作部分是为 完成程序功能而设计的主要程序段;循环的修改部
分则是为保证每一次重复(循环)时,参加执行的信
息能发生有规律的变化而建立的程序段。 Back Next Home
• (3) 循环控制部分。循环控制本来应该属于循
Next
Home
6
3.数据项与表达式
常量——二进制数,B;十进制数,D;十六进制数,H;字 符串:用引号括起来的1个或多个字符。
汇编语言程序设计 第1篇 汇编语言基础知识
汇编 语言实现 汇编后的目 标文件只有 208字节
2019/1/23
11
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
建议: ●充分注意“汇编”课实践性强的特点, ●多读程序,多写程序,多上机调试程序, ●熟悉PC机的编程结构, ●掌握汇编语言及其程序设计的基本概念、
2019/1/23
第 1章
汇编语言基础知识
19
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
(3)一般的十进制数转换成二进制数 为了将一个既有整数又有小数部分的十进制数转换成二进制 数,可以将其整数部分和小数部分分别进行转换,然后再组合 起来。 例:117.8125D = 1110101.1101B
1.1.2 汇编语言的特点
经常与高级语言配合使用,应用十分广泛。
2019/1/23
第 1章
汇编语言基础知识
9
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
编程实现 c =a+b,并在屏幕上显示出结果。 #include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1; b=2; c=a+b; printf(“c=%d\n",c); return 0; }
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ram_Data
RamStart 1 RomStart
Again:
;用户FLASH的开始 ;主程序,单片机上电开始运行的地方 ;复位堆栈指针,即$00FF SP ;00H A ;00H X #$01,CONFIG1 ;禁止COP复位 Ram_Data ;初始化RAM, 00H Ram_Data #$01+1,RamData ;主循环的开始 Again ;跳到主循环的开始 RstVector Main_Pro ;定义复位向量 ;复位向量
4 汇编语言源程序的格式:操作数 操作数:是操作码操作的对象,可以是地址、标 号、数值或表达式。 操作数位于操作码之后,两者用至少一个空 格或Tab符隔开。 多个操作数之间用逗号“,”隔开。 大多数指令需要操作数,但是有些隐含寻址 的指令(针对CPU寄存器的操作)没有操作 数,如CLRA, STX,RSP等等。
4 汇编语言源程序的格式:操作码 操作码:表示某种计算或者控制,例如表示加法、 跳转等等。它可以是伪指令,也可以是助记符。 操作码位于标号之后,两者用至少一个空格 或Tab符隔开。对于没有标号的语句,操作符 不能从一行的第一列开始写,前面应该至少 有一个空格或Tab符。这和标记刚好是相反的。 操作码是必须的,在一条语句中一定存在操 作码。 例ORG,EQU,ADD,MOV,INC,LDA, STA,CLR等等。
3 机器语言 & 汇编语言 100101010000000101101110000000010 0000000这串机器码表示:1A,1$00 机器语言的缺陷: 代码长,不好记忆,不易看懂,容易写错。 汇编语言:为了解决机器语言的缺陷,人们发明 了另外一种语言——汇编语言。这种语言用符号 (助记符,标号,数值)来代替冗长的、难以记 忆的0、1代码串。 LDA #1T 表示1A MOV #1T,$00 表示1$00
4 汇编语言源程序的格式:仿真体验 在ICS08上面运行”学生练习(找错)_汇编语 言程序设计1.asm “,对照汇编语言源程序的格 式中的各个要点,找出问题并改正它们.
5 常量
常量是指那些在汇编时已经有确定数制的量。分为数值常量(也叫 常数)和符号常量。 常数:以数值的形式出现在符号指令中。常数可以是二进制、十进 制、十六进制和ASCII码,其中二进制、十进制、十六进制分别加 前缀%、!、$或者后缀Q、T、H,ASCII码用单引号‘’表示。 如10010111Q=%10010111=97H=$97=151T ‘A’ ;等同于41H 符号常量:经常使用的地址或者数值预先用伪指令EQU定义为一个 名字,然后用该名字来表示该地址或数值,这个名字就成为了符号 常量。例如 PORTA EQU $0000 ;将$0000地址单元定义为符号 ;常量PORTA Ram_Start EQU 0080H ;将数值0080H定义为符号常量 ;Ram_Start
4O
1 本单元目标
了解什么是汇编语言
掌握汇编语句格式 掌握源程序框架结构
2.1 一个典型的、完整的汇编源程序
RamStart RomStart RstVector $INCLUDE EQU $0080 EQU $EC00 EQU $FFFE ‘JL3REGS.INC‘ ORG DS ORG Main_Pro RSP CLRA CLRX MOV CLR MOV JMP ORG DW ;MC68HC08JL3的RAM起始地址 ;FLASH的起始地址 ;复位向量地址 ;寄存器头文件,包含了各寄存器的定义 ;开始变量的定义 ;$0080处定义1B的RAM空间
4 汇编语言源程序的格式:注释 注释:在一行语句中,分号“;”后面的内容为 注释部分;另外,如果“*”在一行语句的第一 列,也表示该行是注释。 它应由一个以上的空格或制表符与操作数或 操作码(无操作数时)分开。 它可包含任何可打印的ASCII字符。 注释不是必须的,但是对于初学者,建议给 每条语句写注释。
4 汇编语言源程序的格式:其他说明 语句中出现的标点符号“:”、“;”、“,”、 “_”都必须是在“英文标点模式”下输入,而 不能在“中文标点模式”下输入为“:”、 “;”、“,”、“——”。 注释中出现的标点符号则不受上面的限制。 不要把数字0和字母o混淆。 不要把数字1和字母l混淆。 不同语句的标号、操作码、操作数、注释最好对 齐,这样的程序美观且容易阅读。
2.2 典型、完整的汇编源程序流程图
开始 程序员知道会有调 用,但是不知道什 么时候、什么地方 会调用中断子程序, 而是由系统自动调 用。
程序员有意安排的, 知道在什么时候、 什么地方会调用
常量初始化
主程序 初始化 寄存器和变量
一般子程序
主循环入口
中断子程序
从事主要工作
跳到主循环入口
3 机器语言 & 汇编语言 机器语言:芯片的存储单元只有0和1两种状态, 而芯片也只会判断0和1这两种状态,因此一串代 码要让芯片“读懂” ,这串代码只能由数字0和 1组成。像这种由数字0和1按照一定的规律组成 的代码就叫机器码,也叫二进制编码。一定长度 的机器码组成了机器指令,用这些机器指令所编 写的程序就称为机器语言。 1010011000000001 表示1A 011011100000000100000000 表示1$00
4 汇编语言源程序的格式:标号
用户的汇编源程序由一条条汇编语句组成,每条最完整 的语句可包括以下4个部分:标号、操作码、操作数和注 释。不区分大小写。
例如:Again: 标号 MOV #$01,RamData ;主循环的开始
操作数 注释 操作码 标号:实际上是代表了某行语句存放的起始地址。 标号不是必须的,绝大多数语句都没有标号,它通常只用在子 函数或转移目的语句处。 标号的前面不能留有任何空格,标号后面的冒号“:”可有可 无。 标号只能以字母开头,后面可以跟数字和下划线。 标号在标号部分只能出现一次,不能重复。 判断这些标号,找出不合法的:Init_Pro, _Init_Pro, 3Init_Pro, Again1。 (不合法: _Init_Pro, 3Init_Pro)
3 机器语言 & 汇编语言 汇编:汇编语言写成的源程序,我们人类看得懂, 但是芯片看不懂,它只认得机器语言,汇编源程 序必须翻译成机器语言,才能在芯片上运行。利 用专用的汇编工具(例如ICS08)把汇编语言写 成的源程序翻译成机器语言的过程就叫汇编。 现今,人们普遍采用汇编语言和C语言来编写单 片机源程序。我们这个学期要学的就是汇编语言。