汇编语言实验4涉压缩BCD码数据的转换程序DEBUG练习

汇编语言实验4涉压缩BCD码数据的转换程序DEBUG练习
汇编语言实验4涉压缩BCD码数据的转换程序DEBUG练习

ASCII码与BCD码之间的转换

1)字符的ASCII码表示

计算机中存储的信息很多,其中一部分是用于数学计算的数据,另一部分则是表示某种含

义的字符或字符串。由于从键盘输入的或屏幕显示的信息,都是用字符串的形式表示的。因此,微机中必须能够存储和处理字符和字符串。

计算机中使用的字符包括有如下4类:

·字母:A、B、C、…、Y、Z、a、b、c、…、y和z。

.数字:0、1、2、3、 (9)

·专用符号:!、@、+、-、﹡、/、……

·控制字符:BEL(响铃)、LF(换行)、CR(回车)……

这些字符在计算机内部都由特定的二进制数表示。目前在微机中,最常用的字符表示法

是ASCII码(American Standard Code for Information Interchange,美国标准信息交换码)。在这种表示法中,每一个字符可以表示为一个8位的二进制数,即一个字节。其中。低

7位用于表示该字符的ASCII值,最高位未定义,一般可用作奇偶校验位。

常用字符的ASCII码表见表1.2。

2)、十进制数的BCD码表示

BCD码(Binary Code Decimal),又称“二进制表示的十进制数”,是一种非常适合数据

输出的编码。一般而言,它可分为如下两种:

(1)、压缩型BCD码:它用4位二进制数表示一位十进制数。即采用二进制数0000~1001分别表示十进制数中的0~9,而另6种组合1010~1111在BCD中则不允许出现;

(2)、非压缩型BCD码:它用8位二进制数,即一个字节表示一位十进制数。其高4位

固定为0,而低4位采用二进制数0000~1001分别表示十进制数中的0~9。亦即用0000 0000~0000 1001分别表示十进制数中的0~9。而其余组合则不允许出现。

表1列出了十进制数与BCD编码的对应关系。

1.按如下步骤操作,了解DEBUG 命令及其使用方法。

(1)打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。

(2)用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

(3)用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。再用

命令 D100 观察内存情况,之后接用二个命令D 观察内存情况。再用命令D100:10F 观察内存区的情况,说明这次与上次内存区各个段地址是什么,为什么?

(4)用命令 F110:11F 'A' 重复上二项实验,设法用D命令找到并观察结果,进行比较。

(5)用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

(6)用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

①34H,22H ②56H,78H ③A5,79H ④1284H,5678H ⑤A758,347FH

例如: H 34 22

(7)用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。

(8)用R命令将AX,BX内容改写为1050H及23A8H。

(9)用A命令在内存100H处键入下列内容:

MOV BX, 8275H

MOV AX,3412H

ADD BX,92A5H

ADC AX,2F65H

ADD BX,EAE6H

ADC AX,9C88H

用U命令检查键入的程序并记录,特别注意左边的机器码。

用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。

标志位显示 1 0

CF CY NC

ZF ZR NZ

SF NG PL

AF AC NA

OF OV NV

PF PE PO

DF DN UP

IF EI DI

(1)对照书本中关于 debug操作的介绍对以上实验内容进行总结。

(2)G命令的功能是什么?有那几种格式?

(3)D命令的功能是什么?有那几种格式?

(4)用P命令逐条运行上述指令,与T命令进行比较,阅看书本中关于这二个命令的说明,它们之间有什么不同,在本实验中为什么没有体现?

本试验未体现

2.在编译与连接生成执行程序之后利用DEBUG调试该程序,了解不同变量数据存储情况,了解变量的三种含义及用法,了解加法、乘法运算方法及对标志位的影响。(在某些句后给出了单步执行该句后需要思考与记录的问题)。

DATA SEGMENT

A DW 35H,9AC9H

DB 34H

B DW 4CBEH,8872H

DB 34H

C D

D 8A607H

DB 34H

D DD 98AB457H

DB 34H

E DB -48H

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

START:MOV AX,DATA ;数据段在那里?怎样看数据段中的内容?

MOV DS,AX

;在执行一次单步后查看数据区,记录数据是怎样存放的。

;对以下每句运行后分析:这一句的意义是什么?

; 如果是加法,相加的数据是什么?在存储区什么位置?

; 处理的结果在那里?

; 对标志位的影响如何?

; 观察一下,如果去掉“WORD PTR ”编译时会如何?

MOV AX,OFFSET A+2 ;AX中值是多少?意义是什么?

LEA AX,A+2 ; AX中值是多少?意义是什么?

MOV AX,A+2

ADD AX,B+2 ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV BX,A

ADC BX,B ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV AX,WORD PTR C

ADD AX,WORD PTR D ;多少加多少

MOV AX,WORD PTR C+2

ADC AX,WORD PTR D+2 ;多少加多少

;对以下每句分析:数据是如何存放的?

; 相乘结果在那里?

; 对CF与OF的影响如何?特别注意进位与符号扩展并不完全对应

MOV AL,E

MOV BL,-3

MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E

MOV BL,3

MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E

MOV BL,-3

IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E

MOV BL,-1

IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E

MOV BL,3

IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV BL,-1

MUL BL ;-1=ffh,cf=1。为什么?

MOV AL,58h

MOV BL,-1

iMUL BL ;-1,cf=0,高位全1。为什么?

MOV AL,90h

MOV BL,-1

MUL BL ;-1=ffh,cf=1。为什么?

MOV AL,90h

MOV BL,-1

IMUL BL ;-1,cf=0,高位全0。为什么?

MOV AL,58h

MOV BL,1

MUL BL ;*1,cf=0,高位全0。为什么?

MOV AL,58h

MOV BL,1

iMUL BL ;*1,cf=0,高位全0。为什么?

MOV AL,90h

MOV BL,1

MUL BL ;*1,cf=0,高位全0。为什么?

MOV AL,90h

MOV BL,1

IMUL BL ;*1,cf=0,高位全1。为什么?

MOV AH,4CH

INT 21H

CODE ENDS

END START

(1)乘法运算时使CF与OF为0的情况其实不多见,你能否总结一下大致在什么情况下会出现它们为0的情况?

(2)如果要看到数据中数据的存放情况,一种方法是用D<段地址> <偏移地址>,另一种方法是用DDS:< 偏移地址>。你用什么方法得到段地址?试用这二种方法观察数据区中数据存放情况,A、B、C、D、E的地址各是多少,为什么?

3.检查下面那些指令是错误的,说明原因并改正。(用MASM对该程序进行编译,观察那些语句报错,报的是什么错?再看语句,根据语法与句法分析实际是什么错,在语句后加简单注释,说明错误原因,尝试进行修改,要求尽量使修改结果符合原设计意图。最终要求全部修改后能通过编译。)

DATA SEGMENT

BUF DB 3

DA1 DB ?

C DB 'B',0DH,0AH,'$'

COUNT EQU $-C

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

START:MOV AX,DATA

MOV DS,AX

MOV DL,255H

INC COUNT

MOV CS,DX

CMP 280,BL

PUSH DX

LEA AL,C

MOV BX,DA1[DX]

SUB [DI],[SI]

ADD [DX],BX

MOV 80H,AX

MOV DA1,AX

ADD [DI],10H

MOV BX,OFFSET DA1

MOV [SI+DI],BX

INC CS

MOV ES,DS

POP AH

ROL AX,2

MOV BX,DA1[DI]

MOV AH,4CH

INT 21H

CODE ENDS

END START

ASCII码与压缩型BCD码的相互转换

4.十进制数的ASCII码转换为压缩型BCD码

令数据段中自ASC_BUF开始的缓冲区内存放着若干个ASCII码表示的十进制数(每个单元存放一位十进制数),要求将这些ASCII码表示的十进制数转换为BCD码,并把两个相邻单元的BCD码合并在一个存储单元(若ASCII码的个数为奇数,则将首地址单元的十进制数对应的BCD码单独存放一个单元,其余的按统一的方法处理)。应用DEBUG跟踪执行程序,当程序执行到语句MOV AH,4CH 时,查看数据区的内容,分析运行结果。通过执行过程深

入理解内存储器分段的概念。

本程序中因有的位置使用了中文符号,在编译时会报错,观察是如何报错的?检查问题出现在什么地方,将之改正后重新编译直到通过。

DATA SEGMENT

ASC_BUF DB ‘71542185’

COUNT EQU $-ASC_BUF

BCDBUF DB 10 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA

START: MOV AX,DATA

MOV DS,AX

MOV SI,OFFSET ASC_BUF

MOV DI,OFFSET BCDBUF

MOV CX,COUNT

MOV BX,CX

SHR BX,1 ;BX右移一位,等效于除2

JNC EVEN1 ;(CF)=0,则CX为偶数

MOV BL,[SI] ;对首位单独进行处理

AND BL,0FH

MOV [DI],BL

DEC CX

INC SI

INC DI

EVEN1: MOV AL,[SI]

AND AL,0FH ;清高4位为0

MOV BL,[SI+1]

AND BL,0FH ;清高4位为0

MOV DL,16

MUL DL

ADD AL,BL

MOV [DI],AL

ADD SI,2

INC DI

DEC CX

JNZ EVEN1

MOV AH,4CH

INT 21H

CODE ENDS

END START

(1)画出本程序程序流程图。

(2)将‘71542185’改为‘471542185’,观察结果有何不同,分析程序中判断数字个数奇偶并“对首位单独进行处理”的意义与程序设计方法。

(3)总结将二个十六进制字符拼成一个八位二进制数的程序设计方法。

5.压缩BCD码转换为十进制数的ASCII码

将数据段中字节变量BCD_BUF为首地址的缓冲区中一个八位十进制数对应的压缩BCD 码转换为ASCII码,并显示。

DATA SEGMENT

BCD_BUF DB 34H,25H,12H,97H ;十进制数97122534 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

MAIN PROC NEAR

PUSH DS

SUB AX,AX

MOV AX,DATA

MOV DS,AX

MOV CX,4

MOV SI,OFFSET BCD_BUF

ADD SI,3

MOV DH,0

CHG_OUT1: PUSH CX

MOV AL,[SI] ;取压缩BCD码

DEC SI ;修改指针

MOV BL,AL ;保存AL

MOV CL,4

ROR AL,CL

AND AL,0FH ;取高半字节BCD码

ADD AL,30H ;生成ASCII码

MOV DL,AL

MOV AH,2

INT 21H ;标准设备输出

MOV AL,BL ;从BL所保存的AL恢复AL

AND AL,0FH ;取低半字节BCD码

ADD AL,30H ;生成ASCII码

MOV DL,AL

MOV AH,2

INT 21H ;标准设备输出

POP CX

DEC CX

JNZ CHG_OUT1

RET

MAIN ENDP

CODE ENDS

END

(1)对本程序不用执行执行文件的方式,而分别用DEBUG单步跟踪、分断点运行等二种方式操作,记录操作过程与执行结果。

(2)总结从一个字节16进制数据获得其二个16进制数码的程序设计方法。

二进制数与BCD码之间的转换

6.二进制数转换为压缩BCD码

将DX寄存器中存放的无符号二进制数(0-65535)转换为压缩BCD码(在程序中自行加一条语句,将一个数保存到DX中),保存在BCD_BUF缓冲区中。应用DEBUG跟踪执行程序,查看数据区的内容,分析运行结果

DATA SEGMENT

BCD_BUF DB 3 DUP(0)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

MAIN PROC NEAR

PUSH DS

SUB AX,AX

MOV AX,DATA

MOV DS,AX

MOV DI,OFFSET BCD_BUF

MOV AL,0

MOV CX,5

CLEAR_BUF: MOV [DI],AL ;初始化缓冲区

INC DI

DEC CX

JNZ CLEAR_BUF

MOV DI,OFFSET BCD_BUF

CHG_BCD1: MOV AX,DX ;转换开始

MOV DX,0

MOV CX,10

DIV CX

MOV BL,DL

MOV DX,0

MOV CX,10

DIV CX

MOV CL,4

SHL DL,CL ;左移4位,等效于乘以16

AND DL,0F0H

OR DL,BL ;组合BCD码

MOV [DI],DL ;存储BCD码

INC DI

MOV DX,AX

CMP DX,0

JNZ CHG_BCD1

RET

MAIN ENDP

CODE ENDS

END

(1)假如保持在DX中数为6440,用debug调试,运行G=0 40,再用DDS:0观察结果。又更换DX中数为26440,用同样方法再看结果。说明结果是怎样存放的。

7.压缩BCD码转换为二进制数

将BX寄存器中的四位压缩型BCD码转换为二进制数,并存放到DX中。应用DEBUG 跟踪执行程序,分析运行结果

CODE SEGMENT

ASSUME CS:CODE

START: MOV BX,3698H

MOV SI,BX

XOR AX,AX

MOV CX,4 ;BCD码共4位

CHG_AGAIN1: MOV DI,0

PUSH CX

MOV CX,4 ;每个BCD码对应四位2进制数CHG_AGAIN2: SHL SI,1 ;SI左移,最高位送CF

RCL DI,1 ;CF最高位送DI

DEC CX

JNZ CHG_AGAIN2 ;将某位BCD码送DI

MOV CX,10

MUL CX

ADD AX,DI ;二进制数合并

POP CX

DEC CX

JNZ CHG_AGAIN1

MOV DX,AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

(1)将以上实验3、4、5、6所要求的压缩BCD码改为要求非压缩BCD码,求设计程序。

(2)第5、6题提到的数说明为二进制数,如果提到的数说明为十六进制数,意义是否相同?

汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解 1、显示命令D ① D [地址] ② D [范围] 如不指定范围,一次显示8行×16个字节。 -D ;默认段寄存器为DS,当前偏移地址 -D DS:100 / -D CS:200 -D 200:100 -D 200;200为偏移地址,默认段寄存器DS -D DS:100 110/ -D 100 L 10 2.修改命令E ① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。 ② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。 -E DS:100 F3 ‘AB’ 8D。 3.添充命令F F 范围数据表; 将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。 -F DS:0 L5 01,02,03,04,05 -F DS:0 L5 01 02 03 04 05(空格分隔) -F DS:0 L5 FF ;5个字节重复使用FF 4.显示修改寄存器命令R R;★显示所有寄存器和标志位状态; ★显示当前CS:IP指向的指令。 显示标志时使用的符号: 标志标志=1 标志=0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC

5.汇编命令A A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。 注释:①在DEBUG下编写简单程序即使用A命令。 ②每条指令后要按回车。 ③不输入指令按回车,或按Ctrl+C结束汇编。 ④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。 6.反汇编命令U ① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。 ② U 范围;对指定范围的单元进行反汇编。 -U -U100 -U100L10 7.运行程序命令G ① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。 ② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。 ③ G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。 ④G=地址断点1[,断点2,…断点10] -G ;从CS:IP指向的指令开始执行程序。 -G=100 ;从指定地址开始执行程序。 -G=100 105 110 120 8.跟踪命令(单步执行命令)T ① T;从当前IP开始执行一条指令。 ② T 数值;从当前IP开始执行多条指令。 ② T =地址; ③ T =地址数值; -T -T5 / -T=100 5 9.跟踪执行并跳过子程序命令P P [=地址] [数值];类似T命令,但跳过子程序和中断服务程序。 10.退出DEBUG命令Q Q;返回DOS环境。 -Q 11.命名命令N N 文件标示符;指定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。 -N MY_https://www.360docs.net/doc/d52389393.html,

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 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) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

汇编语言实验_Debug命令的使用

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

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

《汇编语言》实验报告 ——累加器制作 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

利用DEBUG调试汇编语言程序段

利用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个字节容 说明:指定要显示其容的存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [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个字节容 -D 100 L 10 ;显示DS段, 100H开始的100H个字节容 2)E命令(修改指定存) 例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

汇编语言调试及运行

汇编语言程序设计实验 实验一 汇编语言的调试和运行 班级: 姓名: 学号: 日期:

实验一汇编语言的调试和运行 一、实验目的 1、熟悉DEBUG程序和命令,并用它运行基本指令和察看运行结果。 ○1怎样调用Debug ②如何显示和修改内存单元 ③如何显示和修改CPU的寄存器 ④各标志位的状态是如何表示的,怎样修改标志寄存器 ⑤怎样汇编与反汇编 ⑥怎样执行程序 ⑦怎样跟踪程序 ⑧怎样命名和读写文件 ⑨怎样退出Debug 2、熟悉汇编中通用传送指令。 3、理解指令不同的寻址方式,注意规定或限制使用的寄存器如:双操作数 指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越 前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用 的寄存器。 二、实验内容 1、键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '

2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。 4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII 码?

6、用DEBUG调试和运行下列程序,记录所用的DEBUG命令和运行结果。 MOV WORD PTR [1100],3445 MOV WORD PTR [1102],5678 MOV WORD PTR [1106],6732 MOV AX,[1100] SUB AX,[1102] ADD AX,[1106] MOV [1104],AX HLT 其中粗斜体的数字可以修改。

汇编语言程序设计实验篇emu

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.360docs.net/doc/d52389393.html, 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章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第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. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

汇编程序调试实验报告

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

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

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

汇编程序调试实验报告

微机原理与接口技术 课 程 作 业 班级:

目录 一、实验目的: (3) 二、实验环境 (3) 三、实验过程 (3) (一)基础知识储备 (3) (二)汇编语言程序设计 (3) (三)汇编程序调试 (3) 四、调试实例 (4) (一)实例一 (4) (二)实例二 (5) (三)实例三 (6) (四)实例四 (7) 五、实验总结 (8) (一)实验收获 (8) (二)实验感悟 (9)

一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O 接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MASM 汇编语言及其程序设计方法。 二、实验环境 EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序 三、实验过程 (一)基础知识储备 1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。 2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。 3.了解MASM汇编语言及其程序设计方法。掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。了解顺序结构、分支结构、循环结构和子程序的设计方法。 (二)汇编语言程序设计 1.分析问题,明确要解决的问题和要求。 2.确定解决问题的思路和方法。 3.将解决问题的方案编制成程序流程图。 4.根据流程图,逐条编写程序。 5.上机调试,验证程序是否正确。 (三)汇编程序调试 MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。 汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:

汇编语言上机 实验一 DEBUG常用命令及8086指令使用

实验一DEBUG常用命令及8086指令使用 实验目的: 通过实验掌握下列知识: 1、8086指令: M OV,ADD,SUB,XCHG等 2、DEBUG命令: A,D,E,F,H,R,T,U。 3、ASCII码及用16进制数表示二进制码的方法。 内容及步骤: 一、DEBUG 命令使用: 1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。 2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。 3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 4、用命令F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存 单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。 8、用R命令将AX,BX内容改写为1050H及23A8H。

二、8086常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG A X,BX MOV AH,35

MOV AL,48 MOV DX,75AB XCHG A X,DX 2)用U命令检查键入的程序并记录,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令:

【精品】汇编语言程序设计习题答案

钱晓捷新版汇编语言程序设计习题答案 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1。2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1。4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1。6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000

(5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)—127 (3)127 (4)—57 (5)126 (6)-126 (7)—128 (8)68 1。9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001(3)1011×1001(4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕10011001(6)1011 ∨1001(7) 1。10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII 码为0dh、0ah对应的是什么字符? 1。11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1。12、简述Intel80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM—BIOS? 1。14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。

汇编语言debug的使用方法

进入Windows操作系统,输入cmd回车 输入debug 回车,这样就进入了debug模式 1: 输入-r 查看或者修改寄存器,可以修改CS IP来指向要执行汇编的内存地址-r 回车查看 -r ax 回车修改ax的值 -r cs 回车修改cs的值 -r ip 回车修改ip的值 2: 输入-D 查看内存中的信息 -d 1000:0000 查看段地址为1000H ,偏移地址为0开始的内存信息 -d 1000:0000 00ff 就是查看1000:0000 到1000:00ff的内存信息 查看主板生产日期 -d fff0:0000 00ff 可以看到右下角的08/14/08 格式月/日/年,08年8月14号生产的主板 这里的生产日期是只读的,无法修改,通过-e修改表面上看是改过了,下次打开后又恢复之前数据了 如果直接用-d 0100 则会显示DS:0100处的内存信息,也就是显示段地址为ds,便宜地址为0100的内存信息。 -d ds:0100 也可以这么使用 3:输入-E修改内存中位置的信息 -e 1000:0000 1a 00 09 10 a1 61 这样就可以修改对应段地址为1000H ,偏移地址为0开始的内存信息 -e 1000:0000 'a+b' 这样就会在内存1000:0000处写入61H(a的ASICC码) 1000:0001处+ 1000:0002 62 4:输入-u查看指定位置对应的汇编指令 -u 1000:0000 查看该处的汇编指令 -u cs:0000 查看段地址为cs处的汇编指令 5:输入-t 执行指令 -t 执行CS:IP所指向的第一个指令,如果要执行自己写入内存的指令,应该先通过-r来改变CS IP的值,然后再执行-t 执行

汇编语言程序设计实验内容(川大微机原理实验资料和内容以及MASM使用方法)

第一部分汇编语言程序设计 实验一熟悉、使用DEBUG调试工具 一.上机目的: 1.了解并逐步熟悉汇编语言的编辑方法及特点. 2.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。 3.掌握汇编语言的编辑、汇编及连接的过程。 4.了解并逐步掌握运用DEBUG进行调试汇编语言程序。 二.实验内容: 1.运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 2.运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ 文件。 3.运用LINK.EXE文件进行连接,形成*.EXE文件。 4.仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。 5.运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 6.再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG 的设置断点,单步执行等功能发现错误所在并加以改正。 程序清单: 多字节非压缩型BCD数除法(88754/6=14792) DA TA SEGMENT A D B 8,8,7,5,4 B DB 6 C DB 5DUP (0) N EQU 5 DA TA ENDS CODE SEGMENT ASSUME CS:CODE;DS:DATA;ES:DATA, START MOV AX,DA TA MOV DS,AX MOV ES,AX CLD LEA SI,A LEB DI,C MOV CX,N MOV AH,0 LP1:LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C

汇编上机过程及DEBUG调试

汇编语言的一般上机操作过程 一、上机前的软件准备 ●MS-DOS操作系统(如:MSDOS6.2、MSDOS7.0等) ●文本编辑器(如:记事本、https://www.360docs.net/doc/d52389393.html,等) ●汇编程序(如:MASM.EXE、ASM.EXE等) ●连接程序(如:LINK.EXE等) ●调试程序(如:DEBUG.EXE等) 二、汇编语言程序的建立过程 在编辑软件支持下,将源程序输入到计算机中。注意:汇编语言源程序的扩展名为.ASM。 可使用任意一种文本编辑工具来建立和编写汇编语言源程序,例如,Word、Notepad、记事本等。在MS-DOS下也可以使用其自带的文本编辑器EDIT。使用方法是在DOS提示符下输入EDIT后回车,进入EDIT的操作界面后即可编写汇编语言源程序,完成编写后,将文件保存后缀名为.ASM的汇编源文件。

2.利用宏汇编程序对汇编源程序.ASM进行汇编,产生.OBJ文件利用宏汇编程序MASM对汇编源程序(扩展名为.ASM)进行汇编,产生扩展名为.OBJ的可重定位的目标代码。MASM是一个宏汇编软件,使用时后面跟所要汇编的源程序名即可。格式如下: C:\>MASM filename(.asm) 回车 当屏幕上显示一些版权信息后会出现几个提示信息,如:要求输入目标文件名;询问是否建立列表文件(扩展名为.LST);询问是否建立交叉索引文件(扩展名为. CRF)。 Object filename [filename.OBJ]:回车 Source listing [NUL.LST]:回车 Cross-reference [NUL.CRF]:回车 当上述问题回答完毕,MASM即开始汇编工作。MASM对源程序进行汇编将采用两遍扫描方式,每一遍扫描都以遇到END伪指令作为结束点。第一遍扫描是检查名字并产生一个符号表,确定每个变量名和符号的相对位置;第一遍扫描就将产生目标文件,并根据用户需要产生列表文件和交叉索引文件。最后,经汇编后的上述源文件将生产3个文件,其中目标文件是一个二进制文件,供连接使用;列表文件是一个文本文件,它会列出源程序及相应的目标程序清单,同时给出符号表,表中分别给出段名、段的大小属性。表中还将给出变量名、标号的类型等,以供用户调试使用。 在对源程序进行汇编过程中,汇编程序会对源程序中的非逻辑性错误给出显示,例如,在源程序中使用了非法指令、标号重复、相对转移超出转移范围等等。如果MASM检查出源程序中有错误,则列出错误位置、错误代码及错误性质,并分别列出警告错误(Warning Errors)和严重错误(Serve Errors)的个数。其中前者提出一般性错误,后者指出语法错误。如果错误的个数不为0,则需要打开源文件(.ASM)根据提示的错误信息修改所在行的错误,当调试、纠错直到正确无误时,错误个数将变为0。如果错误个数为0,则程序通过汇编,要指出的是汇编过程只能指出程序中的语法错误,并不能指出算法错误和其它错误。 程序设计者在改正源程序中的错误过程中,重新编辑源程序,形成新的.ASM 文件,然后重新汇编,直到汇编程序显示无错误为止。

相关文档
最新文档