汇编语言第三次离线作业答案

汇编语言第三次离线作业答案
汇编语言第三次离线作业答案

2017-2018汇编语言第三次离线作业答案

1、习题4.3

将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。

思路:设这四组从低位到高位分别放在AL、BL、CL和DL寄存器中。这里仅列出代码段:

MOV BL, AL ;将AL中的两组分开

AND AL, 0FH ;屏蔽高四位后送AL

MOV CL, 4 ;原AL中的数据逻辑右移4次送BL

SHR BL, CL

MOV DL, AH ;将AH中的两组分开

AND DL, 0F0H ;屏蔽低高四位后送DL

MOV CL, 4 ;原AH中的数据逻辑右移4次送DL

SHR DL, CL

MOV CL, AH ;屏蔽高四位后送CL

AND CL, 0FH

2、习题4.4

编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。

GETKEY: MOV AH, 1 ;从键盘输入,出口:AL存键值

INT 21H

CMP AL, ‘a’;判键值是小写字母?

JB GETKAY

CMP AL, ‘z’

JA GETKAY

SUB AL,20H ;是小写字母转换为大写字母

MOV AH, 09H ;显示

INT 21H

3、习题4.5

已知用于LED数码管显示的代码表为:

LEDTABLE DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB 80H,90H,88H,83H,0C6H,0C1H,86H,8EH

它依次表示0 ~ 9、A ~ F这16个数码的显示代码。现编写一个程序实现将LEDNUM 中的一个数字(0~9,A~F)转换成对应的LED显示代码

.MODEL SMALL

.STACK 256

.DATA

LEDTABLE DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB 80H,90H,88H,83H,0C6H,0CLH、86H,8EH

LEDNUM DB ?

.CODE

.STARTUP

MOV BX, OFFSET LEDTABLE

MOV AL, LEDNUM

XLAT ;AL中存有对应的LED显示代码

.EXIT 0

END

4.习题4.26

把一个字符串中的所有大写字母改为小写字母,该字符串以0结尾,写成过程,利用AL作为入口、出口参数完成。

.MODEL SMALL

.STACK 256

.DATA

STDNG DB ‘HELLO EVERYBODY !’, 0

.CODE

.STARTUP

MOV BX, OFFSET ATRING

AGAIN: MOV AL, [BX]

CALL CHAN ;调用过程

MOV [BX] , AL

NEXT: INC BX

JMP AGAIN

DONE: .EXIT 0

CHAN PROC ;大写转换为小写字母的过程

OR AL, AL

JZ DONE

CMP AL,’A’

JB NEXT

CMP AL,’Z’

JA NEXT

OR AL, 20H

RET

CHAN ENDP

END

5、习题4.27

请按如下子程序说明编写过程:

;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码

;出口参数:AL=对应的二进制数

ASTOB PROC

AND DH, 0FH ;十位数的ASCII码转为二进制数

MOV AL, DH

MUL 10 ;AL= 10*DH

AND DL, 0FH ;个位数的ASCII码转为二进制数

ADD AL, DL ;AL= 10*DH + DL

RET

ASTOB ENDP

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

计算机组成原理实验1-汇编语言实验

微处理器与接口技术 实验指导

实验一监控程序与汇编语言程序设计实验 一、实验要求 1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。 2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。 3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。 4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。 二、实验目的 【1】学习和了解TEC-XP16教学实验系统监控命令的用法; 【2】学习和了解TEC-XP16教学实验系统的指令系统;

【3】学习简单的TEC-XP16教学实验系统汇编程序设计。 三、实验注意事项 (一)实验箱检查 【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。 【2】五位控制开关的功能示意图如下: 【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】 (二)软件操作注意事项 【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。即选定的是用户实验时通讯线接的PC机的端口; 【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试; 【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试; 【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。

汇编错误总结

1、test.asm(54):error A2000:Block nesting error、 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一 致。说明:此错误信息通常见于一个段定义起始段名和末尾段 名不一致。修改:检查段定义,使段名前后保持一致。修改: 检查段定义,使段名前后保持一致。 2、test.asm(5):error A2005:Symbol is multidefined:DATA 说明:符号重复定义了。说明:此错误信息提示DATA符号 重复定义了。修改:重新设置。修改:将其中一个符号DATA 重新设置。 3、test.asm(7):error A2009:Symbol not defined:B9H、 说明:行指令出错,查看该指令,说明:此错误信息为 test.asm中第7行指令出错,查看该指令,源操作数为十六 进制数B9H。按规定以字母开始的十六进制数,应在其。按规 定以字母开始的十六进制数,以便汇编程序区分常数和符号。 前面加上数字0以便汇编程序区分常数和符号。另一种出错的 可能原因是程序中使用的符号变量没有定义。能原因是程序中 使用的符号变量没有定义。修改:修改:以0B9H取代B9H; 使用伪指令定义变量。;使用伪指令定义变量。 4、test.asm(11):error A2009:Symbol not defined:NO、 说明:说明:test.asm中第11行指令JLE no-count,符号 中使用了中折线,中,符号中使用了中折线,折线在汇编中是 作为减号,因此,没有定义。折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以 使用下划线。注意,汇编语言规定符号中可以使用下划线。修 改:修改:将no-count改为no_count。。 5、test.asm(28):error A2010:Syntax error、

汇编语言上机实验指导书(不含源代码)

汇编语言上机实验指导书 一、概述 上机实验总学时为14学时,其中综合性实验为2学时。实验共有6项暂定为7次,每次2学时。 1.实验辅导的主要内容 实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。 2.实验的软硬件要求 关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。 3.加强实践能力的培养 实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括: 实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等; 开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。 对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。 实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性) 1.实验目的: (1) 熟悉汇编语言运行环境和方法 (2)了解如何使用汇编语言编制程序 (3) 熟悉DEBUG有关命令的使用方法 (4) 利用DEBUG掌握有关指令的功能 (5) 利用DEBUG运行简单的程序段 2.实验内容 (1)学会输入、编辑汇编语言程序 (2)学会对汇编语言程序进行汇编、连接和运行 (3)进入和退出DEBUG程序 (4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。 3.实验准备 (1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。 (2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。 (3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’; (1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。 4.实验步骤 (1)在DOS提示符下,进入MASM目录。 (2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 ①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm ②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc 不断修改错误,直至汇编通过为止。 ③用连接程序link产生执行文件exe.例:link abc

高级语言、汇编语言及机器语言的区别

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。 低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言,中文版的C语言习语言等等,这些语言的语法、命令格式都不相同。 高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。高级语言、汇编语言和机器语言都是用于编写计算机程序的语言。 高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。 机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统 它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如,操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编.

汇编语言实验报告——累加

《汇编语言》实验报告 ——累加器制作 2014级计算机科学与工程学院 学号: 姓名 一、实验要求: 1.显示 INPUT N :,提示用户输入数字字串 2.检测输入字串的合法性,非法给出提示 3.将输入数字字串转化为数值,存入变量n 4.累加1~n ,存入变量sum 5.以十进制显示sum 二、流程图: 开始 输入 判断是否为回车 判断是否为数字 是 转化为数值,将堆栈中 的高位数字乘10然后与低位数字相加,放入堆 栈 否 显示“error ” 结束 否 是 判断cx=0 否 将CX加到A X中 是 得出sum的值 将结果除以10并将余数存入堆栈,累计位数cx,直至商为0 将堆栈中的数字依次输出显示,直至cx=0

三、源代码: DATAS SEGMENT str1 db "Input N:","$" str2 db "sum=","$" str3 db 0ah,"error","$" n dw 0 sum dw 0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA dx,str1;输出提示符 mov ah,9 int 21h input: mov ah,01;输入数字 int 21h cmp al,0dh;判断是否为回车 jz step1 cmp al,"0";判断字符合法性 jb error cmp al,"9" ja error sub al,"0";转化为ASCII码 mov ah,0;此段将高位乘10 push ax mov ax,n shl ax,1 push ax mov cl,2 shl ax,cl

余敦辉《汇编语言》实验指导书实验1-实验3

《汇编语言》实验指导书

目录 实验一Debug命令的使用 (3) 实验二基本汇编指令的使用 (9) 实验三汇编语言程序的调试与运行 (13) 实验四系统功能调用程序的调试与运行………………错误!未定义书签。 实验五分支程序设计……………………………………错误!未定义书签。 实验六循环程序设计……………………………………错误!未定义书签。 实验七子程序设计………………………………………错误!未定义书签。 实验八高级汇编语言程序设计…………………………错误!未定义书签。 实验九I/O程序设计……………………………………错误!未定义书签。 实验十中断程序设计……………………………………错误!未定义书签。 实验十一综合程序设计 (38)

实验一Debug命令的使用 一、知识点 1、DEBUG简介 DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。 DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。 DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。 DEBUG命令的使用注意问题: (1)字母不分大小写 (2)只使用十六进制数,但没有带后缀字母“H” (3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。 (4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。 2、Debug的调入和退出 以WIN7环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态: C:\Documents and Settings\lfy> 然后输入命令: >Debug 进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。 退出Debug的命令:Q 3、Debug常用命令 (1)汇编命令A,格式为: - A [地址] 功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态 应用:用于调试一条指令或几条指令组成的一个程序段。

汇编语言出错信息说明

汇编程序出错信息说明 汇编程序出错信息 编 码 提示说明 0Block nesting error 嵌套过程、段、结构、宏指令、IRC、IRP或REPT不是正确结束,如嵌套的外层已终止,而内层还是打开状态。 1Extra characters on line 当一行上已接受了定义指令说明的足够信息,而又出现多余的字符。 2Register already defined汇编内部出现逻辑错误。 3Unknown symbol type 符号语句的类型字段中有些不能识别的东西。 4Redefinition of symbol在第二遍扫视时,连续地定义了一个符号。5Symbol is multi-defined重复定义一个符号。 6Phase error between passes 程序中有模棱两可的指令,以至于在汇编程序的两次扫视中,程序标号的位置在数值上改变了。 7Already had ELSE clause在ELSE从句中试图再定义ELSE语句。 8Not in conditional block 在没有提供条件汇编指令的情况下,指定了ENDIF或ELSE。 9Symbol not defined符号没有定义 10Syntax error语句的语法与任何可识别的语法不匹配11Type illegal in context指定的类型在长度上不可接收 12Should have been group name给出的组名不符合要求 13Must be declared in pass1得到的不是汇编程序所要求的常数值,例如:向前引用的长度 14Symbol type usage illegal PUBLIC符号的使用不合法 15Symbol already different kind 企图定义与以前定义不同的符号 16Symbol is reserved word企图非法使用一个汇编程序的保留字 17Forward reference is illegal向前引用必须是在第一遍扫视中定义过的 18Must be register 希望寄存器作为操作数,但用户提供的是符号而不是寄存器 19Wrong type of register 指定的寄存器类型并不是指令或伪操作所要求的,例如:ASSUME AX 20Must be segment or group希望给出段或组,而不是其它

汇编语言上机操作

汇编语言上机操作 一、建立子文件夹 如:D:\hb\masm 二、复制相关文件 把masm.exe、link.exe、ml.exe三个文件复制到上述文件夹中。 三、进入DOS方式 开始/运行/cmd 当前提示符可能是: C:\documents and settings\administrator> 四、常用DOS操作命令 1、改变当前盘 输入d: 并回车,屏幕显示: D:\> 2、改变当前目录 1)进入下一级目录 D:\>cd hb 回车后,屏幕显示: D:\hb>cd masm 回车后,屏幕显示: E:\hb\masm> 问题:可以一次进入下面二级或多级目录吗? 2)返回上一级目录 D:\hb\masm>cd.. 回车后,屏幕显示: D:\hb\>cd.. 回车后,屏幕显示: D:\> 问题:可以直接返回根目录吗? D:\hb\masm>cd\ 回车后,屏幕显示: D:\> 3、显示当前目录容 D:\>dir /p 分页显示当前目录容 问题:如何显示d:\text中的容? D:\>dir d:\text↙ 4、DOS方式下如何运行程序? DOS方式下的可执行文件(即程序文件)扩展名为.exe或.,运行时只需要在系统提示符下输入文件主名即可。例如,有一个文件名为test.exe,存入在D:\hb\masm 中,运行时,可以这样做: D:\hb\masm>test↙ 五、汇编语言上机过程 1、编辑源程序 运行:edit 回车后,进入EDIT环境,输入完后存盘(file/save)并退出(file/exit)。

2、汇编 D:\hb\masm>masm add5.asm↙ 生成目标程序文件add5.obj。(如果有语法错误,会提示错误所在行号和错误类型)3、连接 D:\hb\masm>link add5↙ 生成可执行文件add5.exe。 六、DEBUG程序调用及汇编语言程序调试方法 调试程序DEBUG是DOS支持的又一种系统软件,主要用于汇编语言程序的调试。汇编和连接过程只能查出源程序的语法错误,不能查出功能上的错误和程序不完善的地方。DEBUG程序为用户提供多种命令,大致有:显示和修改寄存器和存贮单元的容;执行程序中任意一段或一条指令;汇编单条源语句和反汇编机器码指令;查找字符代码;端口的输入和输出;文件装入存和写入磁盘等。用户利用这些命令可以查出任何程序功能上的错误。下面说明DEBUG程序的启动方法和主要命令意义。 (一)DEBUG程序的启动 DEBUG程序有两种启动方法。DEBUG程序是在DOS盘上的一个独立的可执行程序(扩展名为.COM),所以,DEBUG程序的第一种启动方法就是把它看作和一般的可执行程序一样,只要打入DEBUG和回车键,就可以把它装入存。但是这样启动只把DEBUG 程序本身装入存并进入等待DEBUG命令状态,还没有把要调试的程序装入存。第二种启动DEBUG的程序的方法是一次相继装入DEBUG程序和要调试的程序。打入的命令格式如下: DEBUG[d:][path]filename[.ext][parml][parm2] 其中的Filename是要调试程序的文件名,可选项[d:][path]和[.ext]分别是要调试程序的所在盘符、路径和扩展名。可选项[parml]和[parm2]是DEBUG程序为要调试程序准备的参数(一般不用)。 例进入DEBUG程序并装入要调试程序。其操作如下: D:\hb\masm>DEBUG add5.exe (进入DEBUG,并装配add5.exe) 此时屏幕上出现一个短线,这表示可以使用DEBUG命令了。 如果启动DEBUG时没有指定要调试的文件名,则需要用N命令指定要调试的文件,再用L命令将其装入存。操作如下: D:\hb\masm>debug↙ - n add5.exe↙ - l↙ (二)DEBUG命令 在说明每个命令之前,先说明一些共同信息: ■DEBUG命令都是以一个英文字母开头,后面跟一个或多个参数。 ■命令字母和参数可用大写或小写或混合形式。 ■命令字母和参数中,相邻两个十六进制之间必须用逗号或空格分开.其它各部分之间有无空格或逗号都可以。 ■执行任何命令期间都可用Ctrl+Break键方法结束命令的执行。

汇编错误总结

1、test.asm(54): error A2000: Block nesting error 、 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一 致。说明:此错误信息通常见于一个段定义起始段名和末尾段 名不一致。修改:检查段定义,使段名前后保持一致。修改: 检查段定义,使段名前后保持一致。 2、test.asm(5): error A2005: Symbol is multidefined: DATA 说明:符号重复定义了。说明:此错误信息提示 DATA 符号重 复定义了。修改:重新设置。修改:将其中一个符号 DATA 重 新设置。 3、test.asm(7): error A2009: Symbol not defined: B9H 、 说明:行指令出错,查看该指令,说明:此错误信息为 test.asm 中第 7 行指令出错,查看该指令,源操作数为十六进制 数 B9H。按规定以字母开始的十六进制数,应在其。按规定以 字母开始的十六进制数,以便汇编程序区分常数和符号。前面 加上数字 0 以便汇编程序区分常数和符号。另一种出错的可能 原因是程序中使用的符号变量没有定义。能原因是程序中使用 的符号变量没有定义。修改:修改:以 0B9H 取代 B9H;使用 伪指令定义变量。;使用伪指令定义变量。 4、test.asm(11): error A2009: Symbol not defined: NO 、 说明:说明:test.asm 中第 11 行指令 JLE no-count,符号中使 用了中折线,中,符号中使用了中折线,折线在汇编中是作为 减号,因此,没有定义。折线在汇编中是作为减号,因此,汇 编提示标号 NO 没有定义。注意,汇编语言规定符号中可以使 用下划线。注意,汇编语言规定符号中可以使用下划线。修改:修改:将 no-count 改为 no_count。。 5、test.asm(28): error A2010: Syntax error 、

汇编语言实验指导书.

汇编语言实验指导书纪平张雷编写 安徽工业大学计算机学院 二00四年三月 目录 实验一DEBUG的启动及其基本命令的使用 (2 实验二内存操作数及寻址方法 (6 实验三汇编语言程序的调试与运行 (8 实验四查表程序设计 (10 实验五系统功能调用 (12 实验六循环程序设计 (13 实验七分支程序设计 (15 实验八子程序设计 (18 实验九综合程序设计 (20 附录实验报告 (21 实验一DEBUG的启动及其基本命令的使用一.实验目的: 掌握DEBUG 的基本命令及其功能 二.实验内容:

DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1、DEBUG程序的启动 在DOS提示符下,可键入命令: C>DEBUG[d:][path][文件名][ 参数1][参数2] 其中文件名是被调试文件的名称,它须是执行文件(EXE,两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需 的DEBUG命令。 在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。 2、DEBUG的主要命令 (1汇编命令A,格式为: -A[地址] 该命令从指定地址开始允许输入汇编语句,把它们汇编成机 器代码相继存放在从指定地址开始的存储器中。 (2反汇编命令U,有两种格式: 1-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上 一个U命令的最后一条指令的下一个单元开始显示32个字节。

MASM汇编错误信息说明 ASM问题汇总

MASM汇编错误信息说明 test.asm(54):error A2000:Block nesting error 1.1.test.asm(54): 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。 修改:检查段定义,使段名前后保持一致。 test.asm(5):error A2005:Symbol is multidefined:DATA 2.2.test.asm(5): 说明:此错误信息提示DATA符号重复定义了。 修改:将其中一个符号DATA重新设置。 test.asm(7):error A2009:Symbol not defined:B9H 3.3.test.asm(7): 说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。另一种出错的可能原因是程序中使用的符号变量没有定义。 修改:以0B9H取代B9H;使用伪指令定义变量。 test.asm(11):error A2009:Symbol not defined:NO 4.4.test.asm(11): 说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以使用下划线。 修改:将no-count改为no_count。 test.asm(28):error A2010:Syntax error 5.5.test.asm(28): 说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出错。 修改:按照汇编指令的规定格式重新编写。 6.6.test.asm(2): test.asm(2):error A2018:Operand must be register:DX 说明:指定的寄存器不是指令或伪指令所要求的。如:ASSUME DX:DATA 修改:查看汇编指令的规定格式。

汇编程序调试实验报告

微机原理与接口技术 作 业 班级: 目录 一、........................................................... 实验目的:2 二、............................................................. 实验环境2 三、............................................................. 实验过程3 (一)................................................. 基础知识储备3

(二)............................................. 汇编语言程序设计3

(三)汇编程序调试 (3) 四、............................................................. 调试实例4 (一)....................................................... 实例一4 (二)....................................................... 实例二6 (三)....................................................... 实例三9 (四)....................................................... 实例四12五、............................................................. 实验总结15 (一)..................................................... 实验收获15 (二)..................................................... 实验感悟16 一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标 代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MAS汇编语言及其程序设计方法。 、实验环境 EDIT编辑器、MASME编程序、LINK连接程序、TD调试程序

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个节内容

说明: 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ① D SEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容 -D 200 ;显示DS段, 0200H开始的128个字节内容

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

汇编语言上机试验指导

作实验2 【1】.有空加作实验【4】(1). 实验2 算术及位串处理程序 【1】.在数据段预先存放16个十六进制数的ASCII码,把BX中的四位十六进制数,从左到右用查表的方法找到对应数位的ASCII码,并取出显示出来。 要求见书: 参考程序: data segment asc db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46h data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cl,4 rol bx,cl mov si,bx and si,0fh mov dl,[asc+si] mov ah,2 int 21h rol bx,cl mov si,bx and si,0fh mov dl,[asc+si] mov ah,2 int 21h mov ah,4ch int 21h code ends end start 【2】用字符串处理指令编制程序,处理字符串的比较和查找,显示结果。 要求:(1) 字符串的比较程序中,一个字符串在数据段定义,另一个字符串在程序执行时从键盘输入,必须定义键盘缓冲区。并指出不相等的位置。 参考书上例3.51,题目改为MESS2 定义为从键盘输入缓冲区,键盘输入缓冲区定义: mess2 DB 9,?,9 DUP(?) 例3.51 在数据段中有一个长度为19的字符串MESS1,在附加段中有一个长度为19的字符串MESS2,比较它们是否相等。若相等显示‘Y’,否则显示‘N’。编制程序如下所示。

单片机汇编语言常见错误分析

单片机汇编语言常见错误分析 一、汇编软件汇编失败原因分析: 这里采用Keil C51 软件包中的宏汇编器A51 作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成 汇编失败,常见的汇编错误如下:1. 标号重复:常见于复制、粘贴程序时忘 记修改标号,造成出现多个相同的标号,标号是不允许重复的。2.标点符号 以全角方式输入:汇编程序要求标点符号为半角方式,否则汇编失败。可以 在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易 犯而且不容易发觉的错误。3.数值#FFH 前遗漏0:根据要求应该在a~f 前加0,写成#0FFH4.字母O 和数字0 搞混:有时候这两个字看上去完全相同,要注意哦~~5.标号后边遗漏”:”6.标号使用了特殊字符:标号不能用指令 助记符、伪指令、特殊功能寄存器名和8051 在指令系统中用的“#”、“@”等,长 度以2~6 字符为宜,第一字母必须是英文字母。比如:T1、T2、A、B 这些字 符有特定的含义,不允许用于标号。7.AJMP 跳转超过2K 地址:AJMP 属于短跳转命令,有2K 地址范围的限制。8.超过地址范围:JB P3.2,EXIT 跳转超过-128~127 个地址范围。这个是最容易出现的错误!你有可能程序刚才还 能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把JB P3.2,EXIT 转换成JNB P3.2,LD01AJMP EXITLD01: AJMP EXIT……9.字母I 和数字1 混淆:冒失鬼的常见问题。10.创造发明不存在的汇编语言指令:在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不 认可。11.符号“:”“;”最好用半角书写。 二、程序出错: 1.寄存器重复调用:比如主程序中设定了R4=5,表示主程序循环执行5 次,

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

实验一汇编语言上机过程 一、上机前的软件准备: MS-DOS操作系统(如:MSDOS6.22 , MSDOS7.0 等) 文本编辑器(如:https://www.360docs.net/doc/c49971573.html, , TURBO.EXE , TC.EXE , C.EXE 等) 汇编程序(如:MASM.EXE , ASM.EXE,TASM.EXE 等) 连接程序(如:LINK.EXE 等) 调试程序(如:DEBUG.EXE 等) 二、汇编程序建立过程: 通过 a.建立汇编源程序────→ b.编译为目标文件──┬─→d.连接为可执行文件 ↑↓ ↓ │ c.不通过,重新修改(语句错误)││ ├──────────────────────┘│ ↑ f.不正确,用调试工具调试,重新修改(逻辑错误)↓ └────────────────────────────←e运行 ↓正确 g.完成 三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明 PROCEDURE a:建立汇编源程序(即:建立文件名.asm) 这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。将源程序代码录入计算机的方法很多,下面将介绍具体方法。 1.通过MD-DOS自带的EDIT.EXE文本编辑器进行输入,在DOS提示符下键入:EDIT回车,这时如果你系统内可调用时,EDIT的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个文件名,形式:filename.asm ;(其中filename为你起的文件名,由1-8个字符组成),asm 是为汇编程序识别而必须加上去的,不可更改。存盘后在DOS下可用DOS命令DIR来查看,如果看到了所存的文件存在,就可以进行进程b。 2.如果你的系统中没有EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。 PROCEDURE b:编译目标文件(即:编译为.obj .lst .crf文件) 这个过程计算机将把你编的正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。如果此时你的程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,你可根据提示去逐一修改。现介绍具体过程: 在DOS提示符下键入MASM filename回车 (注:你系统内的汇编程序为MASM.EXE,如果你系统的汇编程序为ASM.EXE时,便将命令变为ASM fi lename回车。其中filename为你刚才在PROCEDURE a 中建立的文件名) 这时汇编程序的输出文件可以有三个(分别:.obj .lst .crf),便会出现三次提问,在这可以一路回车即可。下面显示的信息是源程序中的错误个数,如果为0则表示顺利通过,就可进行进程c。但如果不为0就说明有错误,并指出错误出现的行,可依据这个提示去进行修改。但如果错误太多还未等看清就显示过去了,可用如下命令形将错误信息存于一个你指定的文件,再用文本编辑器去查看。MASM filename >filen (f ilen为你起的一个没用过的文件名,用以存放出错信息)以后可查看filen来得到出错信息。

单片机编程时常见的十大问题解答

单片机编程时常见的十大问题解答 1.C 语言和汇编语言在单片机编程时各有哪些优缺点?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 C 语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。 对于目前普遍使用的RISC 架构的8bit MCU 来说,其内部ROM、RAM、STACK 等资源都有限,如果使用C 语言编写,一条C 语言指令编译后,会变成很多条机器码,很容易出现ROM 空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C 编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。 2.C 或汇编语言可以用于单片机,C++能吗?答:在单片机编程中,主要是汇编和C,没有用C++的。 3.搞单片机编程,一定要会C 吗?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 对于目前普遍使用的RISC 架构的8bit MCU 来说,其内部ROM、RAM、STACK 等资源都有限,如果使用C 语言编写,一条C 语言指令编译后,会变成很多条机器码,很容易出现ROM 空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C 编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。 而C 语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言

相关文档
最新文档