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

合集下载

汇编实验报告(-)调试程序DEBUG的使用

汇编实验报告(-)调试程序DEBUG的使用

汇编实验报告(-)调试程序DEBUG的使用《汇编语言程序设计》实验报告实验一调试程序DEBUG 的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。

二、内容及步骤1.DEBUG 命令使用表 1.1 DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16 进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug 的规则,则将以“error”提示,并用“^”指示错误位置。

许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。

其中,段基地址可以是段寄存器或数值;偏移地址是数值。

如果不输入段地址,则采用默认值,可以是缺省段寄存器值。

如果没有提供偏移地址,则通常就是当前偏移地址。

1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。

2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。

注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。

3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。

图1-1 Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L 字节长度”。

D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D [地址] ;显示当前或指定开始地址的主存内容D [范围] ;显示指定范围的主存内容图1-2 D命令调用左边部分是主存逻辑地址,中间是连续16 个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。

钱晓捷新版汇编语言程序设计习题答案(修改)详解

钱晓捷新版汇编语言程序设计习题答案(修改)详解

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.3、什么是汇编语言源程序、汇编程序、目标程序?1.4、汇编语言与高级语言相比有什么优缺点?1.5、将下列十六进制数转换为二进制和十进制表示(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6、将下列十进制数转换为BCD码表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示(1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)681.9、完成下列二进制数的运算(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001(5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。

1.13、什么是DOS和ROM-BIOS?1.14、简述PC机最低1MB主存空间的使用情况。

汇编语言调试DEBUG命令详解

汇编语言调试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 102.修改命令E① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。

DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。

② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。

-E DS:100 F3 ‘AB’ 8D。

3.添充命令FF 范围数据表;将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。

-F DS:0 L5 01,02,03,04,05-F DS:0 L5 01 02 03 04 05(空格分隔)-F DS:0 L5 FF ;5个字节重复使用FF4.显示修改寄存器命令RR;★显示所有寄存器和标志位状态;★显示当前CS:IP指向的指令。

显示标志时使用的符号:标志标志=1 标志=0OF OV NVDF DN UPIF EI DISF NG PLZF ZR NZAF AC NAPF PE POCF CY NC5.汇编命令AA [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。

注释:①在DEBUG下编写简单程序即使用A命令。

②每条指令后要按回车。

③不输入指令按回车,或按Ctrl+C结束汇编。

④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。

6.反汇编命令U① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。

汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。

2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。

3.练习DEBUG常用命令的使用。

4.熟悉8086的寄存器。

5.了解程序的执行过程。

二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。

2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。

3.预习使用DEBUG单步、断点及连续执行程序的命令。

三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。

本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。

DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。

汇编语言程序设计实验DEBUG基本命令的使用

汇编语言程序设计实验DEBUG基本命令的使用
JMP RESTORE
ERROR:
MOV AH,9
LEA DX,WARN
INT 21H
JMP RESTINT 21H
CODES ENDS
END START
调试分析
运行截图
教师评阅:
年月日
评分
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
RESTORE:
MOV AH,9
LEA DX,HINT
INT 21H
MOV AH,10
LEA DX,STRING
INT 21H
MOV BL,STRING+1
MOV BH,0
LEA SI,STRING+2
MOV BYTE PTR [SI+BX],'$'
MOV CX,BX
MOV BL,2
CHECK:
CMP STRING[BX],'A'
JL ERROR
CMP STRING[BX],'Z'
JG ERROR
ADD BL,1
LOOP CHECK
MOV BL,STRING+1
MOV BH,0
MOV CX,BX
MOV BL,2
《微机原理与汇编语言程序设计》实验(上机)报告
班级·学号姓名实验日期任课教师
实验名称
实验一DEBUG基本命令的使用
验证型
实验目的及要求:
1. 掌握DEBUG的基本命令及功能;
实验内容:
1.编写一个小程序,从键盘接收一个大写字母,存放到指定内存单元BUF1,并转换成为对应的小写字符,存放到内存单元BUF2。上机编辑、汇编、连接并运行。

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

DEBUG命令练习

DEBUG命令练习

实验一、调试程序DEBUG实验目的:1、学习汇编语言的一种调试工具DEBUG 的使用方法2、以简单的传送指令(MOV)为例,掌握存储器操作数寻址方式书写格式3、掌握14个寄存器基本功能,理解存储器偏移地址,物理地址的概念实验内容:1、显示存储器单元内容的命令-D(书写格式,使用方法)2、显示和修改寄存器内容的命令-R(书写格式,使用方法)3、修改存储器单元内容的命令-E(书写格式,使用方法)4、反汇编命令–U,汇编命令–A(书写格式,使用方法)5、运行命令-T,-G,退出命令-Q等实验结果:实验二、汇编语言程序的上机过程实验目的:1、熟练掌握用汇编语言设计、编写、调试、运行程序的方法。

实验内容:1、编写出源程序、画出程序的流程图、2、用汇编程序MASM对源程序汇编产生目标文件*.OBJ,用连接程序LINK产生可执行文件*.EXE。

3、用DEBUG 进行调试。

MOV AX, 1234HMOV BX,5678HPUSH BXPUSH AXPOP BX ;执行后BX= (1)POP AX ;执行后AX= (2)MOV AX,6384H ;执行后AH= (3)MOV CL,4ROR AL,CL ;执行后AL= (4)AND AL,0F0H ;执行后AL= (5)实验三、数据传送指令实验目的:1、进一步加深对寄存器,存储器操作数、立即数概念理解。

2、掌握存储器操作数各种寻址方式的格式。

3、理解进栈出栈时指令的执行过程,累加器的端口地址表示。

4、理解地址传送指令源操作数都为存储器操作数。

5、理解标志寄存器传送指令。

实验内容:1. 若定义DAT DD 12345678H,则DAT+2字节单元的数据是()。

A. 78HB. 56HC.34HD. 12H2. 某计算机字长为16位,其内存容量为1M字节,按字(或字节)编址,它的寻址空间为()。

A. 512KBB. 512KC. 1024KD. 1024KB3.若程序中的数据定义如下:ORG 0030HDA T1 DB 10 DUP (?)DA T2 EQU 12HDA T3 EQU 34HDA T4 DW $+3 ,56H则数据项$+3 的值为()A. 003BHB. 003CHC. 003DHD. 003EH实验四、算术运算指令实验目的:1、掌握加法,减法和比较指令对OF,CF影响,进行一种简单的归纳。

汇编语言程序调试及工具软件DEBUG

汇编语言程序调试及工具软件DEBUG

15
15、S检索 格式:S 起始地址 结束地址 值表 S 起始地址 L字节数 值表 功能:在指定内存范围内检索值表指定的字符,如果找到,则显示 检索到的单元地址;如果没找到,则显示提示符。 例: 设内存DS:0000H开始存入1,2,3, ‘A’ , ‘B’ , ‘A’ , ‘B’ 要求检索字符‘A’ , ‘B’ , ‘F’ -SDS:0 06 A 1542:0003 1542:0005 -SDS:0 06 B 1542:0004 1542:0006 -SDS:0 06 F -
通过调试工具检查功能的正确性。
2
二、调试工具软件DEBUG
1、简介 面向汇编语言的动态调试工具,有19条命令。 通过跟踪、测试对.EXE和.COM文件动态跟踪调试。 查找文件中的错误及运行结果。 可以直接编写、调试小程序。 2、DEBUG的启动方式
(1)在DOS状态下直接输入
C:DEBUG ADD.EXE (2)在DOS状态下输入 C:DEBUG -NADD.EXE -L
17
16
16、C比较 格式:C 起始地址 结束地址 目的地址 C 起始地址 L字节数 目的地址 功能:比较两个数据块内容,如果不相同,则显示其内容和地址。 默认为数据段,目的地址只包含偏移地址。 例:把ES:0开始的10个字节内容与DS:100H开始的区域进行比较, 找出与之不同的内容。 -CES:0 LA DS:100 执行结果: 82DD:0000 03 2D 82CD:100 82DD:0002 00 02 82CD:102 82DD:0003 05 09 82CD:103 82DD:0008 04 66 82CD:108 17、Q退出 格式:-Q 功能:退出DEBUG命令。
9
例2:从CS:0004开始执行3条指令。 -T=4 3

8086系统汇编语言压缩BCD码与二进制相互转换问题的4种方法

8086系统汇编语言压缩BCD码与二进制相互转换问题的4种方法
3 01 。moc.yjxjc@auhuygnahz � 箱邮子电� �计设统系 息信事从 �师程工级高 �人春长林吉 �女 � � �4691� 华玉张
介简者作
.]S[范规计设程工统系线布合综 7002-11305 BG 】2【 .]S[范规计设房机统系息信子电 8002-47105 BG 】1【 】献文考参【
dohtem sthgiew eht fo mus ;dohtem redniamer eht etaluclac ot net yb dedivid ;dohtem noitcurtsni aad ;dohtem tnemtsujda tib yb tib 】s dr ow y eK【 .stneduts eht eripsni dna tcurtsni ot snoituacerp eht edivorp dna dohtem hcae gnisu fo yaw eht etartsnomed ot smargorp cificeps htiw denibmoc ,yllaniF .snoitidnoc tnereffid rednu nesohc eb ot dohtem tseb eht tuo tniop dna dohtem hcae fo egnar noitacilppa eht ezylana ,yldnoceS .dohteM sthgieW eht fo muS dna dohteM redniameR eht etaluclaC ot neT yb dediviD ,dohteM noitcurtsnI AAD ,dohteM tnemtsujdA tiB yb tiB si taht ,yllautum tamrof DCB dekcap ot tigid yranib gnisrevnoc fo sdohtem ruof edulcnoC 】t c art s bA【 �anihC,320611 nailaD, ygolonhceT fo ytisrevinU nailaD�

汇编实验一 Debug命令练习

汇编实验一 Debug命令练习

汇编上机实验一 调试程序 DEBUG 命令练习
字符用“.”表示。 练习题目:
1. 观看数据段中偏移地址为 0100 开始的前 128 个单元的内容 2.观看数据段接下来的 128 个单元内容 3. 观看数据段中偏移地址为 0100 开始的 8 个单元的内容
四、 E 命令练习
E 命令功能:修改内存单元的内容。 格式:E 地址[内容表] 说明:具有两种操作:1)用内容表中的内容替换制定地址的一个或多个字节的内容;2)允 许顺序显示和修改字节内容,不修改的可按空格。如只键入一个地址偏移量,则缺省的段再 DS 中。按↙键结束命令。 练习题目:
U 反汇编命令功能:从指定的地址反汇编 32 字节的汇编语句,同时,显示出他们的地址、 十六进制值以及对应的汇编语句。 格式:U[地址]/[范围] 说明:地址、范围均缺省时,则以前条 U 命令反汇编的最后一条命令后的单元作为起始地 址,若以前未用过的 U 命令则以 CS:100 作为起始地址。
T 跟踪命令功能:逐条跟踪程序。 格式:T[=地址][值] 说明:执行自指定地址开始的一条或给定值条指令,每条指令执行完都会显示出所有寄存器 和标志位的内容,未给定地址则以 CS:IP 开始执行。
练习题目:
1.求出下列数据与 62A0H 之和,并根据结果设置标志位 SF,ZF,CF,OF 的值
①4321H 解:① 6 2 A 0 H
+ 4321H A5C1H
②1234H ③CFA0H ④9D60H OF=1,SF=1,ZF=0,CF=0
2、上机验证结果
步骤:-A↙ mov ax,62a0↙ add ax,4321↙ ↙
二、 R 命令练习
R 命令功能:显示和修改寄存器内容和标志。 格式:R 寄存器名 说明:显示/修改单个寄存器内容,例如:R AX↙

试验--汇编语言语法练习与代码转换

试验--汇编语言语法练习与代码转换
CHANG:PROC
LAST: CMP [BX],10;LAST:CMP BYTE PTR 源自BX],10JC NEXT
SUB [Bx],10;sub byte ptr [bx],10
INC [BX+7];INC BYTE PTR [BX+7]
JMP LAST
NEXT: ADD [BX+8],SUM;NEXT:MOV CL,SUM
ADD BYTE PTR [BX+8],CL
ADD [BX+7],30H;ADD BYTE PTR [BX+7],30H
ADD [BX+8],30H;ADD BYTE PTR [BX+8],30H
RET
CHANG:ENDP
CODE ENDS
END BEG
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
指导教师
韩崇
实验类型行:
验证
实验学时
2
实验时间
2015年4月16日
一、实验目的和要求
1.掌握汇编语言源程序的格式;
2.进一步学习汇编语言源程序的编辑、汇编、目标文件的链接和可执行文件的执行全过程;
3.掌握编辑软件、TASM、TLINK和TD的使用方法、掌握汇编语言的语法规则。
4.实验内容:
(1)练习实验指导上的实验示例:练习并掌握汇编语言开发全过程,显示5行HELLO
(2)排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可执行文件。正确的执行结果在屏幕上显示:25+9=34 (1)编辑源程序(生成.ASM文件)

汇编语言调试程序DEBUG的练习

汇编语言调试程序DEBUG的练习

汇编语言调试程序DEBUG的练习一、实验目的1、学习使用DEBUG程序的各种命令。

2、利用DEBUG学习8086指令系统。

二、实验任务1、参照说明,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。

2、用命令A汇编下列指令,判断指令正误并说明原因。

(1)ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。

(2)LEA DI,[AX];错误,因为LEA指令的目的操作数不能是DI。

(3)MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。

(4)PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。

(5)OUT 900,AL;错误,因为900已经超过了8位二进制数的范围。

(6)MOV [BX],0;错误,因为内存和立即数之间的类型没有确定。

3、练习使用汇编命令1)利用加法指令求3+52)利用乘法指令求3*53)利用算术运算指令求3的补码4)学习使用逻辑运算指令。

求5和17相与、相或的结果。

5)利用不同移位指令将10011111右移3位,查看结果,并比较不同点。

三、实验设备PC机一台四、实验步骤1、实现3加5:2、实现3*5:3、实现求3的补码:4、实现5和17相与:对实验一的说明下面所有操作均在DOS状态下进行。

DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。

其主要功能为:▪可动态调试汇编语言程序;▪可检查或修改CPU各寄存器、标志及内存单元的内容;▪可输入汇编指令到指定的内存;▪可把要调试的程序(通常以可执行文件形式存储在磁盘上)调入到内存中,控制CPU按单步、设置断点等方式执行程序,检查程序运行过程中的中间结果,以便寻找程序出错的原因。

一、进入DEBUGC:\MASM>DEBUG二、常用DEBUG 命令1、DEBUG命令概述(1)特点A.除命令RF外,DEBUG命令本身均为单字符,后面跟一个或多个参数,有些命令不给参数也能运行,如下表[]中的参数,这种情况下用默认值作为参数;B.DEBUG下输入和显示的数均为十六进制数,故数字后不可加后缀H,O,B等,否则认为命令错;C.命令和参数不区分大小写;DEBUG主要命令一览表(2)常用参数含义A、内存地址内存地址表示一个内存区域的起始地址,由段地址和偏移地址两部分组成。

总汇编语言实验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 控制,显示提示符 '_ '。

单片机实验4 子程序设计-- BCD码转换为二进制

单片机实验4 子程序设计-- BCD码转换为二进制

实验4. 子程序设计----BCD 码转换为二进制单字节可存放两位压缩BCD 码(0—99)为0—9)单字节BCD 码转换为二进制子程序入口:(R0)= 压缩BCD 码的地址出口:(A)= 转换结果DSFR::MOV A,@R0ANL A,#0F0H ;取十位数SWAP A ;变为标准BCD 码MOV B,#10MUL AB ;(A)=D1×10MOV R7,A ;D1×10暂存R7MOV A,@R0ANL A,#0FH ;取个位ADD A,R7 ;A=D1×10+D0RET1、实验内容:子程序设计要点:1) 子程序一般为多次返复使用的程序段,一般应说明入口条件,DSFR 子程序的入口条件是:被转换为二进制的单字节BCD 码为间接寻址,间接寻址寄存器为R0。

要调用DFSR 子程序必需先将压缩BCD 码的存放地址赋与R0。

而出口条件是指最后结果在哪儿存放。

本子程序转换结果在ACC 内。

2) 主程序调用子程序,在调试时一般要先调试子程序、再调试主程序。

2、实验步骤1)打开PV32编程序。

汇编正确进入调试界面。

否则修改程序重新汇编直到通过。

2)打开DATD窗口给20H、21H、R6、R7赋值3)单步调试DSFR子程序观察并记禄寄存器、内存的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改、存盘、汇编。

返回调试界面调试通过。

4) 设断点调试主程序观察并记禄寄存器、内存的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改、存盘、汇编。

返回调试界面调试通过。

3.实验报告1.写出主程序流程图、子程序流程图、程序清单2.根据记渌数据给程序加注解3.调试心得。

实验4涉及压缩BCD码数据的转换程序及DEBUG练习

实验4涉及压缩BCD码数据的转换程序及DEBUG练习

实验4 涉及压缩BCD码数据的转换程序及DEBUG练习一、实验内容: 1. ASCII码表示的十进制数转换为压缩型BCD码2. BCD码转换为十进制数的ASCII码3. 二进制数转换为BCD码4. BCD码转换为二进制数5.应用DEBUG观察上述练习的结果二、实验目的:1.掌握利用DEBUG进行调试目的程序的方法。

2.学习并理解寻址方式,学习改正错误语句的方法。

3.认识压缩型BCD码与非压缩型BCD码表示方法。

4.学习涉及BCD码的数据转换的方法。

三、知识准备1. Debug调试程序的使用Debug.exe是十分重要的调试工具,可以用来以二进制形式查看文件内容、可以进行汇编与反汇编,可以对程序进行跟踪式执行,可以修改寄存器与内存中的数据等等。

命令格式:DEBUG [[<盘符>:][<路径>]<文件名> [<测试参数>]]注意文件名称必须带扩展名。

如果用于汇编程序调试,扩展名只能是.EXE或.COM。

在DEBUG命令后若用户键入文件名,则DEBUG将指定的文件装入内存;若用户未键入文件名,则DEBUG对当前存储器中的内容进行操作,也可以用N和L命令将需要的文件装入存储器。

进入调试器后,在界面最左边出现一个减号,这是Debug提示符,表示可以打入Debug 命令对可执行程序进行查看、动态跟踪和调试。

Debug的命令是单个字母,不区分大小写,字母后面可以有一或多个参数,命令、参数一般用空格分隔。

每输入一个命令,回车后执行。

当有错误时,用^和error指示错误所在。

如果需要中断执行命令,可以使用Ctrl+Break键。

如果不标志单位,在命令中使用的参数均以16进制数为单位,输入16进制数据时不用在数据后加H。

如果针对当前段,关于地址可以只标明偏移地址。

如果为非当前段,要申明段地址,方法是在偏移地址前加段地址说明,用冒号分隔。

段地址可以是具体地址数,也可以是段寄存器名。

汇编语言实验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 控制,显示提示符 '_ '。

8086系统汇编语言压缩BCD码与二进制相互转换问题的4种方法可编辑

8086系统汇编语言压缩BCD码与二进制相互转换问题的4种方法可编辑

8086系统汇编语言压缩BCD码与二进制相互转换问题的4种方法设计信息化【文章编号】 .?系统汇编语言压缩码与二进制相互转换问题的种方法■袁雪尧大连理工大学,辽宁大连【摘要】总结出压缩码与二进制相互转换的种方法,引言即逐位调整法、指令法、除十求余法和按权展开法。

同时分析了各种方法的适用范围和不同条件下应该使用的最佳方汇编语言一直是计算机硬件编程中的重点与难法。

最后结合具体程序说明各种方法的使用方法,并且给出注点,而数制转换问题由于涉及知识广、实用性强、具意事项。

有~定技巧性,因此又是汇编语言学习和应用的重【关键词】逐位调整法;指令法;除十求余法;按权展开法中之重。

其中,以压缩码与二进制数之问的转【中图分类号【文献标志码】化最为复杂,也最具有代表性。

为此,通过对系统中各种条件下码与二进制转化问题的探索与总结,我将其归纳为五种情况,四种方法。

方法综述. 逐位调整法 ?将位二进制数看作一个十六进制位,再利用 ,,十六进制和压缩码的关系进行转换。

具体逻辑为:如果该位大于 ,则该位加 ,同时进位。

该方法, ,,虽然原理简单,但是由于涉及到进位操作,数据长度 .增加时,会变得繁琐和复杂。

. 指令法 . , 指令法是利用二进制加法的十进制调整指令,直接集成了逐位调整法,对在中的由 .两个压缩的码相加的结果进行校正,产生一个;;正确的码的和。

因此,相对于逐位比较法,使用 ;它可以更好的利用现成的汇编语言逻辑,直接实现?址 ?址 ?址 ? ?址 .址 .址 . .址 .址 .址 ?址 . .址 .址 .址 . .址 .址 .址 .址 ?址 .龇 .;‘. 视频安防监控系统工程设计规范 .组成部分,希望通过本文,能为汽车工厂设计中信息【】入侵报警系统工程设计规范】.系统设计起到抛砖引玉的作用,与同行们共同交流。

【收稿日期. .让我们为企业发展、促进信息技术的推广应用,为全社会的和谐进步共同努力。

【参考文献】嗡 . 电子信息系统机房设计规范 .张玉华,女,吉林长春人,高级工程师,从事信息综合布线系统工程设计规范【】.系统设计,电子邮箱 . 。

汇编语言课后习题答案 郑晓薇

汇编语言课后习题答案   郑晓薇

习题一1 分别将下列二进制数作为无符号数和带符号数转换为十进制和十六进制数,01110111,,00101111 ,查看正确答案无符号数: =211=D3H,01110111=119=77H,=131=83H,00101111=47=2FH,=170=AAH带符号数:= -45=D3H,01110111=+119=77H,= -125=83H,00101111=+47=2FH,= -86=AAH2 十六进制运算1A52H+4438H ,3967H-2D81H,37H×12H ,1250H×4H查看正确答案5E8AH,0BE6H,3DEH,4940H3 将十进制数变为8位补码,做运算(结果用二进制、十六进制、十进制表示)29+53,73-24,-66+82 ,-102-15查看正确答案00011101+00110101=01010010=52H=8201001001+=00110001=31H=49+01010010=00010000=10H=16+==8BH= -117》4 用压缩BCD码计算(结果用二进制、BCD码、十进制表示)29+53,73-24,66+18 ,132+75查看正确答案00101001+01010011=01111100+00000110==82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110==84H=8400000000+01110101=00000001+00000110=00000011=0207H=2075 符号位扩展(字节扩展为字,字扩展为双字)20A3H,94H ,3456H ,7FH ,EC00H查看正确答案000020A3H,FF94H,00003456H,007FH,FFFFEC00H6 若机器字长为16位,其无符号数表示范围是多少带符号数表示范围是多少分别用十进制和十六进制表示。

(完整版)BCD码以及BCD调整指令

(完整版)BCD码以及BCD调整指令

(完整版)BCD码以及BCD调整指令微机原理与接口技术──BCD码和BCD调整指令一、BCD码BCD码是一种用4位二进制数字来表示一位十进制数字的编码,也称为二进制编码表示的十进制数(Binary Coded Decimal),简称BCD码。

二、BCD码两种格式1、压缩BCD码格式(Packed BCD Format)。

1个字节的高低4位各表示1位十进制数。

例如:十进制数4256的压缩BCD码表示为2个字节:0100 0010B、0101 0110 B2、非压缩BCD码格式(Unpacked BCD Format)。

1个字节的高4位空闲不用,仅用低4位表示1位十进制数。

例如:十进制数4256的非压缩BCD码表示为4个字节:xxxx0100B、xxxx0010B、xxxx0101B、xxxx0110 B三、BCD码的运算和调整BCD码使用频率不高,所以任何CPU都不会设置专门的BCD运算指令。

遇到BCD码的运算,只能利用普通2进制运算指令来进行。

但是,运用2进制的运算指令得到的结果就会失去BCD码的特征。

例1:BCD码35 + 35 ,我们希望得到BCD码70(0111 0000B)。

但是按照2进制规律,0011 0101B + 0011 0101B实际等于0110 1010B。

也就是说低4位按照2进制能够表达10而不会进位。

此时,若对结果加6(0110 1010 + 0000 0110),就可以得到正确BCD结果0111 0000B。

例2:BCD码38 + 38,我们希望得到BCD码76(0111 0110B)。

但是按照2进制规律,0011 1000B +0011 1000B实际等于0111 0000B(BCD码70)。

也就是说低4位按照2进制规律产生了进位,而这个进位带走了16,而不是10,所以结果按照BCD理解少了6。

此时,若对结果加6(0111 0000 + 0000 0110),就可以得到正确BCD结果0111 0110B。

微机接口实验1-汇编四位压缩BCD码减法

微机接口实验1-汇编四位压缩BCD码减法

DATA SEGMENTSTR0 DB'PLEASE INPUT DATA1',0AH,0DH,'$'STR1 DB'PLEASE INPUT DATA2',0AH,0DH,'$'STR6 DB'THE RESULT IS : ',0AH,0DH,'$'STR2 DB 0AH,0DH,'ERROR',0AH,0DH,'$'STR3 DB 0AH,0DH,'YOUR POINT IS: ','$'STR4 DB'-','$'STR5 DB 0AH,0DH,'THE LIST IS: $'STR_I_ERROR DB'INVALID DATA,PLEASE TRY AGAIN: ',0AH,0DH,'$'MINUS DB'-','$'EQUSTR DB'=', '$'BUF DB 50HDB 0DB 50H DUP (0)DAT DW 30 DUP (0)TEMP0 DW?TEMP DW?TEMP2 DW?NEXT DW?ADDRESSB DW?ADDRESSD DW?FLAG DW?N DW?M DW?COUNT DW?TEMPN DW?ALL DW?ALL1 DW?TIPS DW?VALUE DW?DATA ENDSSTACK1 SEGMENT PARA STACKDW 10H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE , DS:DATA , SS:STACK1,ES:NOTHINGSTART :MOV AX,DATAMOV DS,AX;PLEASE INPUT TOTALMOV DX,OFFSET STR0 ;输出提示字符串MOV AH,09HINT 21HMOV ADDRESSB ,OFFSET BUFCALL INPUT_D ;将DATA1放入到AX当中MOV AX,TEMPMOV ALL,AXMOV DX,OFFSET STR1 ;输出提示字符串MOV AH,09HINT 21HMOV ADDRESSB ,OFFSET BUFCALL INPUT_DMOV AX,TEMP ;将DATA2放入到AX当中MOV ALL1,AXMOV DX,OFFSET STR6MOV AH,09INT 21H;======================; print result : a - b = ?; print aPUSH AXMOV AX, ALLCALL PRINT_D; print -MOV DX,OFFSET MINUS ;输出提示字符串MOV AH,09HINT 21HMOV AX,ALL1CALL PRINT_Dpop AX; print =MOV DX,OFFSET EQUSTR ;输出提示字符串MOV AH,09HINT 21H;======================MOV AX,ALLCMP AX,ALL1 ;比较两个大小,如果AX 大,则跳入FLAG1 否则继续执行JAE FLAG1XCHG AX,ALL1 ;因为AX小,所以对调AX 和ALL1中的数据,然后再作减法,最后加入负号,输出到屏幕当中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.. 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, 8275HMOV AX,3412HADD BX,92A5HADC AX,2F65HADD BX,EAE6HADC AX,9C88H用U命令检查键入的程序并记录,特别注意左边的机器码。

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

并注意标志位有无变化。

标志位显示 1 0CF CY NCZF ZR NZSF NG PLAF AC NAOF OV NVPF PE PODF DN UPIF EI DI(1)对照书本中关于 debug操作的介绍对以上实验内容进行总结。

(2)G命令的功能是什么?有那几种格式?(3)D命令的功能是什么?有那几种格式?(4)用P命令逐条运行上述指令,与T命令进行比较,阅看书本中关于这二个命令的说明,它们之间有什么不同,在本实验中为什么没有体现?本试验未体现2.在编译与连接生成执行程序之后利用DEBUG调试该程序,了解不同变量数据存储情况,了解变量的三种含义及用法,了解加法、乘法运算方法及对标志位的影响。

(在某些句后给出了单步执行该句后需要思考与记录的问题)。

DATA SEGMENTA DW 35H,9AC9HDB 34HB DW 4CBEH,8872HDB 34HC DD 8A607HDB 34HD DD 98AB457HDB 34HE DB -48HDATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA ;数据段在那里?怎样看数据段中的内容?MOV DS,AX;在执行一次单步后查看数据区,记录数据是怎样存放的。

;对以下每句运行后分析:这一句的意义是什么?; 如果是加法,相加的数据是什么?在存储区什么位置?; 处理的结果在那里?; 对标志位的影响如何?; 观察一下,如果去掉“WORD PTR ”编译时会如何?MOV AX,OFFSET A+2 ;AX中值是多少?意义是什么?LEA AX,A+2 ; AX中值是多少?意义是什么?MOV AX,A+2ADD AX,B+2 ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV BX,AADC BX,B ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV AX,WORD PTR CADD AX,WORD PTR D ;多少加多少MOV AX,WORD PTR C+2ADC AX,WORD PTR D+2 ;多少加多少;对以下每句分析:数据是如何存放的?; 相乘结果在那里?; 对CF与OF的影响如何?特别注意进位与符号扩展并不完全对应MOV AL,EMOV BL,-3MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,3MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,-3IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,-1IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,3IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV BL,-1MUL BL ;-1=ffh,cf=1。

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

为什么?MOV AL,90hMOV BL,-1MUL BL ;-1=ffh,cf=1。

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

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

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

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

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

为什么?MOV AH,4CHINT 21HCODE ENDSEND START(1)乘法运算时使CF与OF为0的情况其实不多见,你能否总结一下大致在什么情况下会出现它们为0的情况?(2)如果要看到数据中数据的存放情况,一种方法是用D<段地址> <偏移地址>,另一种方法是用DDS:< 偏移地址>。

你用什么方法得到段地址?试用这二种方法观察数据区中数据存放情况,A、B、C、D、E的地址各是多少,为什么?3.检查下面那些指令是错误的,说明原因并改正。

(用MASM对该程序进行编译,观察那些语句报错,报的是什么错?再看语句,根据语法与句法分析实际是什么错,在语句后加简单注释,说明错误原因,尝试进行修改,要求尽量使修改结果符合原设计意图。

最终要求全部修改后能通过编译。

)DATA SEGMENTBUF DB 3DA1 DB ?C DB 'B',0DH,0AH,'$'COUNT EQU $-CDATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DL,255HINC COUNTMOV CS,DXCMP 280,BLPUSH DXLEA AL,CMOV BX,DA1[DX]SUB [DI],[SI]ADD [DX],BXMOV 80H,AXMOV DA1,AXADD [DI],10HMOV BX,OFFSET DA1MOV [SI+DI],BXINC CSMOV ES,DSPOP AHROL AX,2MOV BX,DA1[DI]MOV AH,4CHINT 21HCODE ENDSEND STARTASCII码与压缩型BCD码的相互转换4.十进制数的ASCII码转换为压缩型BCD码令数据段中自ASC_BUF开始的缓冲区内存放着若干个ASCII码表示的十进制数(每个单元存放一位十进制数),要求将这些ASCII码表示的十进制数转换为BCD码,并把两个相邻单元的BCD码合并在一个存储单元(若ASCII码的个数为奇数,则将首地址单元的十进制数对应的BCD码单独存放一个单元,其余的按统一的方法处理)。

应用DEBUG跟踪执行程序,当程序执行到语句MOV AH,4CH 时,查看数据区的内容,分析运行结果。

通过执行过程深入理解内存储器分段的概念。

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

DATA SEGMENTASC_BUF DB ‘71542185’COUNT EQU $-ASC_BUFBCDBUF DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET ASC_BUFMOV DI,OFFSET BCDBUFMOV CX,COUNTMOV BX,CXSHR BX,1 ;BX右移一位,等效于除2JNC EVEN1 ;(CF)=0,则CX为偶数MOV BL,[SI] ;对首位单独进行处理AND BL,0FHMOV [DI],BLDEC CXINC SIINC DIEVEN1: MOV AL,[SI]AND AL,0FH ;清高4位为0MOV BL,[SI+1]AND BL,0FH ;清高4位为0MOV DL,16MUL DLADD AL,BLMOV [DI],ALADD SI,2INC DIDEC CXJNZ EVEN1MOV AH,4CHINT 21HCODE ENDSEND START(1)画出本程序程序流程图。

相关文档
最新文档