北京理工大学汇编实验分析报告
北京理工大学总汇编实验报告材料实验四

本科实验报告实验名称:分支和循环实验一、实验目的1)掌握比较指令;2)理解条件转移和无条件转移指令的区别;3)掌握单分支、双分支、多分支的程序设计方法;4)掌握循环程序设计方法。
二、实验内容内容一程序代码:DATAS SEGMENTBUF DB 12H,98H,45H,64H,78H,36H,55H,44H,0ABH,0CFH COUNT EQU $-BUFNUM1 DB 0NUM2 DB 0BUF1 DB 00,00BUF2 DB 00,00DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,COUNTMOV SI,0MOV DI,0L:MOV AL,BUF[SI]CMP AL,0JG L1INC NUM2CBWADC WORD PTR BUF2[DI],AXJMP L2L1:INC NUM1CBWADC WORD PTR BUF1[DI],AX L2:INC SILOOP LMOV AH,4CHINT 21HCODES ENDSEND START程序运行结果:内容二实验代码:DATAS SEGMENTBUF DB 12H,98H,45H,64H,78H,36H,55H,44H,0ABH,0CFH COUNT EQU $-BUFMAX DB 0MIN DB 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,COUNTMOV SI,0MOV AL,BUF[SI]MOV MAX,ALL:INC SIMOV AL,BUF[SI]CMP AL,MAXJL L1MOV MAX,ALL1:DEC CXJNZ LMOV CX,COUNTMOV SI,0MOV AL,BUF[SI]MOV MIN,ALM:INC SIMOV AL,BUF[SI]CMP AL,MINJA M1MOV MIN,ALM1:DEC CXJNZ MMOV AH,4CHINT 21HCODES ENDSEND START程序运行结果:所以可得有符号数的最大值为78H,无符号数的最小值12H。
北京理工大学汇编实验报告3

北京理工大学汇编实验报告3本科实验报告实验名称:实验三字符串操作实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型:☑原理验证□综合设计□自主创新学生姓名:罗逸雨学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档:专业:通信工程成绩:CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。
当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。
经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。
当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3)字符串操作指令lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI;stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI;scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;rep:重复其后的串操作指令。
北京理工大学汇编语言实验报告一

汇编语言实验报告实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)班级:05211002姓名:张宁学号:1120102310实验日期:2012.9.7晚6:00~9:00汇编语言实验报告实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。
四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。
(一)录入并建立汇编语言源程序文件(ASM 文件)(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)(三)用连接程序LINK 生成可执行程序文件(EXE 文件)(四)程序的调试2、完成程序设计:分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。
使用Debug 查看Positive、Negative 和Zero 三个变量的数据。
五、实验过程及结果:实验一:1.输入给出的程序2.运行输入的程序,发现了三处错误:根据错误提示,发现错误为ADDITION后未打冒号,CMP错打为COM。
修改原代码:改为:3.代码编译成功,生成OBJ文件,再生成EXE文件,可成功运行。
4.在原程序代码后添加两行代码,以验证ADDITION的逻辑正确性,改动如下:现实在DATA1中添加字节型sum ,再将ADDITION的运行结果,从AX送到sum中去。
5.调试发现ADDITION并没用正确运行。
检查语句逻辑性发现,应将JAE改成JB,才能实现累加并终结。
北京理工汇编语言实验一实验报告

汇编语言实验一实验报告——DOS 环境下的汇编语言编程环境使用班级:05211102姓名:庞珂学号:1120111306日期:2013.9.2早8:30~11:30实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示:1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3 个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。
2、目标程序的连接过程连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C 语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。
连接后输出两个文件,一是扩展名为 .EXE 的可执行文件,另一个是扩展名为 .MAP 的内存分配文件。
3、Debug 调试过程一个程序特别是比较复杂的程序不能保证没有一点错误。
因此,在投入正式运行前必须进行调试,以检查程序的正确性。
调试程序Debug 就是用来调试汇编语言程序的一种工具。
四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。
(一)录入并建立汇编语言源程序文件(ASM 文件),例如:D:\MASM> EDIT TEST01.ASM;TEST01.ASM with several errorsDATA1 SEGMENTword1 DW 1, 9078Hbyte1 DB 21, 'World'DD 12345678HMsg DB 'Hello ,everyone!$'DATA1 ENDSSTACK SEGMENTsta dw 20 dup(?)Top equ size staSTACK ENDScode segmentassume cs:code,ds:data1,ss:stackStart:MOV AX,data1MOV DS,AXMOV DX,OFFSET MsgMOV AH,9INT 21hNopMOV AX,0MOV BX,1HADDITIONADD AX,BXINC BXCOM BX,10JAE ADDITIONMOV AH,4ch ;DOS terminate program functionINT 21hCode endsEND Start(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)其操作步骤如下: D:\MASM>MASM TEST01Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981–1985,1987. All rights reserved.Object filename [TEST01.OBJ]:Source listing [NUL.LST]:TEST01Cross-reference [NUL.CRF]:TEST0150674 + 450574 Bytes symbol space free0 Warning Errors0 Severe Errors汇编程序调入后,首先显示版本号,然后出现三个提示行。
北京理工大学汇编实验五

一、实验目的1、掌握子程序有关基本知识,学会子程序设计方法;2、掌握主程序与子程序之间的调用关系及调用方法;3、掌握汇编语言字符串处理方法;4、掌握字符串的输入输出程序设计方法;5、掌握数制转换程序实现方法。
二、实验软硬件环境1、硬件环境:惠普64 位一体化计算机及局域网;2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。
三、实验相关知识把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就性成子程序。
子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率。
1) 子程序的定义语句格式汇编语言子程序以proc 语句行开始,以endp 语句行结束。
如:过程名PROC near[或far]过程体..........................过程名ENDP在主程序中用CALL 过程名调用。
主程序和子程序之间传递参数通常通过栈来进行,当然也可以用某些缺省的寄存器或内存来传递。
但以通过栈来传递参数程序的通用性最强。
2) 子程序调用说明子程序从PROC 语句开始,以ENDP 语句结束,程序中至少应当包含一条RET 语句用以返回主程序。
在定义子程序时,应当注意其距离属性:当子程序和调用程序在同一代码段中时,用NEAR 属性;当子程序及其调用程序不在同一个代码段中时,应当定义为FAR 属性。
当由DOS 系统进入子程序时,子程序应当定义为FAR 属性。
为执行子程序后返回操作系统,在子程序的前几条指令中设置返回信息。
3) 子程序使用中的问题A、主程序调用子程序是通过CALL 指令来实现的。
子程序执行后,通过RET 指令,返回主程序调用指令CALL 的下一条指令,继续执行主程序。
一个子程序可以由主程序在不同时刻多次调用。
如果在子程序中又调用了其他的子程序,则称为子程序的嵌套。
特别是当子程序又能调用子程序本身时,这种调用称为递归。
B、调用子程序时寄存器及所用存储单元内容的保护。
北京理工大学汇编实验二报告

北京理工大学汇编实验二报告本科实验报告实验名称:算术运算类操作实验课程名称:CPU与汇编实验实验时间:2015.10.29 任课教师:王耀威实验地点:10-102实验教师:潘丽敏实验类型:□原理验证■综合设计□自主创新学生姓名:王晓玥学号/班级:1120131332/05111311 组号:学院:信息与电子学院同组搭档:专业:信息工程成绩:一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握 BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、加减法处理指令主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。
表 1-2-1 数据类型数据运算表数制二进制BCD码带符号无符号组合非组合运算符+、-、×、÷+、-+、-、×、÷操作数字节、字、多精度字节(二位数字)字节(一位数字)四、实验内容与步骤1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程将一组操作数分别用ADD,SUB,MUL,DIV运算(2)实验代码:DATAS SEGMENTBUF1 DB 087HBUF2 DB 034HBUF3 DB 4 DUP(?);此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,0MOV SI,AX;两数相加MOV AL,BUF1MOV BL,BUF2ADD AL,BLMOV BUF3[SI],ALMOV AL,0MOV AL,0INC SIMOV BUF3[SI],AL;两数相减MOV AL,BUF1MOV BL,BUF2SUB AL,BLINC SIMOV BUF3[SI],ALMOV AL,0SBB AL,0INC SIMOV BUF3[SI],AL;两数相乘MOV AL,BUF1MOV BL,BUF2MUL BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;两数相除,AL中存放商,AH中存放余数MOV AX,0MOV AL,BUF1MOV BL,BUF2DIV BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START(3)实验结果:1)第一组操作数87H,34H2)第二组操作数0C2H,5FH(4)计算结果计算状态标志表达式结果CF AF ZF OF SF PF 087H+034H 00BB 0 0 0 0 1 1 087H-034H 0053 0 0 0 1 0 1 087H*034H 1B6C 1 0 0 1 0 0 087H/084H 02(1F) 1 0 0 0 0 1 0C2H+05FH 0121 0 0 0 0 0 0 0C2H-O5FH 0063 0 0 1 0 0 1 0C2H*05FH 47FE 0 0 0 0 0 1 0C2H/05FH 02(04) 0 0 0 0 0 0(5)各运算对状态标志位的影响及其意义。
北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。
.段内调用与返回:调用子程序指令与子程序同在一个段内。
因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。
3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。
一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。
2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京理工大学汇编实验报告————————————————————————————————作者:————————————————————————————————日期:本科实验报告实验名称:实验三字符串操作实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型:☑原理验证□综合设计□自主创新学生姓名:罗逸雨学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档:专业:通信工程成绩:一、实验目的1) 熟悉串操作指令的功能与应用;2) 掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3) 了解汇编语言字符串处理基本流程;二、实验环境与原理1.实验软硬件环境1) 硬件环境:惠普 64 位一体化计算机及局域网;2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windows。
2.实验原理1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;当CLD指令使DF=0在执行串处理指令时可使地址自动增量;STD 使 DF=1,在执行串处理指令时可使地址自动减量。
2)重复前缀指令重复次数由计数寄存器 CX 中存放的值决定,指令每重复执行一次,计数器 CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。
当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。
经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。
当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3)字符串操作指令lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI;stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI;scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;rep:重复其后的串操作指令。
重复前先判断 CX 是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。
主要用在MOVS和STOS前。
一般不用在 LODS 前。
上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器 AX、计数器CX。
涉及的标志位:DF、AF、CF、OF、PF、SF、ZF。
三、实验步骤1) 编写程序,比较两个字符串BUF1和BUF2所含的字符是否相同,相同则AL 返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。
提示:输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。
2) 编写程序,设有一字符串存放在以BUF为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。
提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,即求得串的长度。
3) 编写程序,将内存中BUF1某一区域的数据传送到另一区域BUF2中,要求用字符串处理方法。
4) 编写程序,在已知字符串中搜索特定字符‘#’,若找到则AL返回0,找不到AL返回1,要求用字符串处理方法。
5) 编写程序,统计一串字符串中字符"&"出现的次数,要求用字符串处理方法。
6) 编写程序,设有一字符串已存放在 STRBUF 为首址的数据区中,编一程序找出其中的‘#’字符,如果字符串中不存在‘#’字符则应该输出“Not found”。
四、程序清单与框图(1)DATAS SEGMENTBUF1 DB 20,?,20 DUP(?)COUNT1 EQU $-BUF1BUF2 DB 20,?,20 DUP(?)DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,ES:DATASSTART:MOV AX,DATASMOV DS,AXMOV ES,AXLEA DX,BUF1 ;输入字符串BUF1MOV AH,0AHINT 21HMOV DL,0AH ;输出回车、换行MOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HLEA DX,BUF2 ;输入字符串BUF2MOV AH,0AHINT 21HMOV AX,0LEA DI,BUF1LEA SI,BUF2CLDMOV CX,COUNT1REPZ CMPSBJNZ L1 ;BUF1和BUF2不同,跳转至L1 L2:MOV AL,0HJMP EXIDL1:MOV AL,1HEXID:MOV BL,ALMOV DL,0AH ;输出回车、换行MOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HADD BL,30H ;将AL中的内容输出MOV DL,BLMOV AH,02HINT 21HMOV AH,4CHINT 21HCODES ENDSEND START程序分析:本程序的难点在于从键盘输入两字符串BUF1、BUF2。
为了成功输入,要在两次输入之间加上输出回车、换行。
初始化BUF1、BUF2内存区域时,应设置相同的空间大小便于后续比较BUF1、BUF2中的字符。
利用0A号功能进行输入字符串时,要注意初始化时的固定格式。
输入前应将字符串有效地址放入DX中。
利用串操作指令CMPSB逐个比较DS:SI和ES:DI中的字符。
利用CLD指令可以方便地使SI、DI在每次串操作指令后递增。
输出AL中的内容0、1时应先将其转换成ASCII码30H、31H再输出。
框图:开始初始化BUF1,BUF2相同且CX 不为0?循环次数CX 设为字符串长度 SI 、DI 加一,CX 减一输入BUF1、BUF2字符串,设置SI 、DI比较DS:SI 和ES:DI 中字符NY(2)DATAS SEGMENTBUF DB '12345678912345$' BUF2 DB 20 DUP('$') DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,ES:DATAS START:MOV AX,DATAS MOV DS,AX MOV ES,AX LEA BX,BUF LEA SI,BUF LEA DI,BUF2结束AL=0ZF=1?NY AL=1CLDREPNZ CMPSBMOV AX,SISUB AX,BX ;计算BUF长度MOV DX,0 ;将AX中的内容转为10进制输出 MOV BX,10000DIV BXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,02HINT 21HMOV AX,BXMOV BX,1000MOV DX,0DIV BXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,02HINT 21HMOV AX,BXMOV DX,0 MOV BX,100 DIV BXMOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21HMOV AX,BX MOV BX,10 MOV DX,0 DIV BXMOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21HMOV DL,BL ADD DL,30H MOV AH,02H INT 21HMOV AH,4CHINT 21HCODES ENDSEND START程序分析:本程序的难点在于将内存中的十六进制数转为十进制输出。
一个字能表示的最大十六进制数是65535,即十进制的五位数。
所以采用除10000、1000、100、10、1法,将商不断输出,再将余数作为下一次运算的被除数。
输出前要将原数加上30H转为ASCII码。
(3)DATAS SEGMENTBUF1 DB 'ABCDEFGHIJKLMN'COUNT1 EQU $-BUF1BUF2 DB 20 DUP(?)DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,ES:DATASSTART:MOV AX,DATASMOV DS,AXMOV ES,AXLEA SI,BUF1LEA DI,BUF2CLDMOV CX,COUNT1REP MOVSB ;将BUF1中数据复制到BUF2中MOV AH,4CHINT 21HCODES ENDSEND START程序分析:本程序使用的串操作指令是MOVSB,该指令的功能为把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI。
利用该指令可以方便地将BUF1内存单元中的内容复制到BUF2内存单元中。
框图:开始初始化BUF1,BUF2内存单元装载DS、ES段,设置SI、DI循环次数CX设为BUF1长度(4)DATAS SEGMENT BUF1 DB 'ABCDEFGHIJKLMN'COUNT1 EQU $-BUF1DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,ES:DATASSTART:MOV AX,DATASMOV DS,AXSI 加一 DI 加一CX 减一 将DS:SI 中的内容复制到ES:DI 中 N CX=0? Y 结束MOV ES,AXMOV AL,'#'LEA DI,BUF1CLDMOV CX,COUNT1REPNZ SCASBJZ L1JNZ L2L1:MOV AL,0JMP EXIDL2:MOV AL,1EXID:MOV AH,4CHINT 21HCODES ENDSEND START程序分析:本程序使用的串操作指令为SCASB,其功能是把AL中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI。