汇编语言比较两个字符串的大小

合集下载

size和length汇编语言

size和length汇编语言

一、概述汇编语言是一种低级别的计算机编程语言,特点是直接对计算机硬件进行操作。

在汇编语言中,size和length是两个重要的概念,它们分别用于描述数据的大小和长度。

本文将对size和length在汇编语言中的使用进行深入探讨。

二、size的概念及使用1. size指的是数据的大小,通常以字节(byte)为单位来表示。

2. 在汇编语言中,可以使用指令来获取数据的大小,比如在x86架构中,可以使用指令"MOV"来将数据加载到寄存器中,然后通过"SIZEOF"指令来获取数据的大小。

3. size的概念在汇编语言中非常重要,因为在进行内存分配、数据传输等操作时,需要准确地知道数据的大小,以便正确地操作内存位置区域和进行数据传输。

三、length的概念及使用1. length指的是数据的长度,通常用于描述字符串或数组的长度。

2. 在汇编语言中,可以使用循环和计数器来获取数据的长度,比如通过遍历字符串或数组的每个元素,并使用计数器来统计元素的个数,从而得到数据的长度。

3. length的概念在汇编语言中同样非常重要,特别是在处理字符串和数组时,需要准确地知道数据的长度,以便正确地遍历和操作数据。

四、size和length的区别与通联1. size主要用于描述数据的物理大小,即占用多少字节的存储空间,而length主要用于描述数据的逻辑长度,即包含多少个元素。

2. 在汇编语言中,size和length经常会一起使用,比如在操作字符串或数组时,需要同时知道数据的大小和长度,以便正确地分配内存、传输数据和进行遍历操作。

3. 在进行汇编语言编程时,了解size和length的区别与通联,能够帮助程序员编写出高效、可靠的程序,并减少出错的可能性。

五、结论通过本文的介绍,我们对size和length在汇编语言中的概念及使用有了更深入的了解。

在实际的汇编语言编程中,合理地使用size和length,能够帮助程序员更好地操作数据,编写出性能更优越的程序。

《汇编语言》实验指导书

《汇编语言》实验指导书
MOV AH ,2 ;调用DOS中断INT 21H功能的2号子功能
(1)输入程序并汇编
_A100
0B03:0100 MOV DL,33
0B03:0102 MOV AH,2
0B03:0104 INT 2l
“0B03:0100”类似这样的地址是系统自动提供的,不需用户输入。至此程序已输入完毕,并汇编成机器指令。现在用G命令运行程序如下:
(2)运行程序
_G
3
Program terminated normally
编程思路(仅供参考):
该题目要求掌握运算中带符号数和无符号数运算的区别。本题目只考虑有符号数情况
参考程序清单:ABC.ASM
DATA SEGMENT
X DB1;x 单元存放数字1,以下类推
Y DB4
Z DB3
WDB?,? ;预留2个单元,存放运算结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
INT 21H

当要执行INT 21H这条指令时,若用T命令进行跟踪,则进入INT 21H程序(DOS功能调用)后,需要数十次T命令才能返回当前程序;若采用P命令进行调试,则只执行INT 21H一条指令,执行完立即返回,给调试者的感觉好象是执行了一条普通指令一样。因此,当读者以后遇到CALL、INT n指令或带重复前缀的数据串操作指令时,若不想观察相应过程的详细执行过程,就可以用P命令。
若是0则为偶数若为2则为奇数可以采用test指令和条件转移指令jz来实现在内存中以buf单元开始缓冲区中连续存放着10个学生的分数试编制程序统计英中90100分8089分6079分及60分以下少人并把结果分别存放在s9s8s7和s6试编制程序从键盘输入学生成绩abcd自动汇总并显示各类分数的人数假定各类分数的总人数在0止输入

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。

程序调试的方法,常见问题的程序设计方法。

一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。

A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。

A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。

A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。

A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。

A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。

A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。

A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。

A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。

A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。

A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。

汇编语言实验7实验报告

汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。

二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。

三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。

为了方便起见,我们可以先规定字符串的最大长度为100。

接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。

然后,我们需要使用INT 21H中断来读取用户输入的字符串。

具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。

接着,我们需要将该字符串逆序输出到屏幕上。

为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。

具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。

智慧树知道网课《C语言程序设计(西安工程大学)》课后章节测试满分答案

智慧树知道网课《C语言程序设计(西安工程大学)》课后章节测试满分答案

第一章测试1【单选题】(1分)C语言程序的基本单位是()A.程序行B.函数C.语句D.字符2【单选题】(1分)C语言规定,在一个源程序中main函数的位置()A.必须在最开始B.必须在最后C.必须在预处理命令的后面D.可以在其他函数之前或之后3【单选题】(1分)对于一个正常运行的C程序,以下叙述中正确的是()A.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束B.程序的执行总是从main函数开始,在程序的最后一个函数中结束C.程序的执行总是从main函数开始,在main函数结束D.程序的执行总是从程序的第一个函数开始,在main函数结束4【单选题】(1分)以下叙述的是()A.C程序的主函数必须用main作为函数名B.C程序在书写时,有严格的缩进要求,否则不能编译通过C.一个C程序只能有一个主函数D.一个C程序可以包含多个不同名的函数5【单选题】(1分)下列说法正确的是()A.一个函数的函数体必须要有变量定义和执行部分B.C程序的书写格式自由,一个语句可以分写在多行上C.一个函数的函数体必须要有执行部分,可以没有变量定义D.C程序的书写格式严格限制,一行内必须写一个语句6【多选题】(1分)下列关于注释行的描述中,正确的是()A.单行注释以“//”开头,“//”后面是注释内容B.注释只在C语言源程序中有效,在编译时会被编译器忽略C.单行注释以符号“/*”开头,以符号“*/”结尾D.注释只能对程序中的某一行代码进行解释7【单选题】(1分)关于计算机语言的描述,正确的是()A.机器语言由0和1组成,执行速度快B.汇编语言比机器语言执行速度快C.汇编语言已将机器语言符号化,所以它与机器无关D.机器语言因为是面向机器的低级语言,所以执行速度慢8【单选题】(1分)用C语言编写的程序()A.可直接被执行B.是一个源程序文件C.经过编译或解释才能被执行D.经过编译、连接后被执行9【单选题】(1分)连接程序将一个C程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来,最终生成一个可执行的二进制文件,它的后缀是()A..objB..cppC..libD..exe第二章测试1【单选题】(1分)C语言提供的数据类型关键字有()A.DoubleB.CharC.shortD.integer2【单选题】(1分)若有说明和语句:inta=5;a++;此处表达式a++的值是()。

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的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 :重复其后的串操作指令。

IBM-PC汇编语言程序设计课后习题答案

IBM-PC汇编语言程序设计课后习题答案

第五章试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗JA STOPSUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可MOV DL, AL ;显示一个字符的DOS调用MOV AH, 2INT 21HJMP BEGINSTOP: RET编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗DEC AL ;得到前导字符MOV DL, AL ;准备显示三个字符MOV CX, 3DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用INT 21HINC DLLOOP DISPLAYSTOP: RET将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。

答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP ()DSEG ENDS┇BEGIN: MOV CL, 4 ;右移四次MOV CH, 4 ;循环四次LEA BX, STOREA10: MOV DX, AXAND DX, 0FH ;取AX的低四位MOV [BX], DL ;低四位存入STORE中INC BXSHR AX, CL ;右移四次JNZ A10 ;循环四次完了码B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。

汇编语言比较两个字符串的大小

汇编语言比较两个字符串的大小

实验二比较两个字符串的大小一、实验要求从键盘上输入两个字符串,比较两个字符串的大小。

如果第一个字符串比第二个字符串大,则显示1;如果两个字符串相等,则显示0;如果第一个字符串比第二个字符串小,则显示-1(1)画出实现上述功能的汇编语言程序流程图(2)写出实现上述功能的汇编语言程序(3)编译,连接编写的汇编语言程序,并运行生成的可执行文件,描述其执行情况(4)对上述程序进行调试(5)描述反编译后的程序在执行前的数据段的内容何在调试过程中各寄存器的变化。

(6)写出实现上述要求的实验报告二、实验环境该试验包括的硬件和软件条件如下:1、硬件环境(1)联想AMD双核台式电脑(2)内存1G2、软件环境Windows XP三、实验步骤1.程序流程图2.程序代码data segmentmsg1 DB "Please input a string:",'$'string1 DB 100,0,100 dup(?)msg2 DB "Please input another string:",'$' string2 DB 100,0,100 dup(?)msg3 db 0ah,0dhresult DW ?,'$'Data endsStack segment para stackdb 20h dup(0)Stack endscode segmentAssume Cs:code,Ss:stack,ds:Data Start: mov ax,datamov ds,axmov es,axlea dx,msg1mov ah,09hint 21hlea dx,string1mov ah,0ahint 21hxor bx,bxmov bl,string1+1 lea dx,msg3mov ah,09hint 21hlea dx,msg2mov ah,09hint 21hlea dx,string2 mov ah,0ahint 21hlea dx,msg3mov ah,09hint 21hcmp bl,string2+1 ja lop1jb lop2jmp lop3lop1: mov cl,string2+1 jmp lop3lop2: mov cl,string1+1 jmp lop3lop3: mov cl,blcldlea di,string2+2 lea si,string1+2 repz cmpsbja mat1jb mat2jz mat3mat1: mov result,'1' lea dx,resultmov ah,09hint 21hjmp exitmat2: mov result,'1-' lea dx,resultmov ah,09hint 21hjmp exitmat3: mov result,'0' lea dx,resultmov ah,09hint 21hjmp exitexit: mov ah,4chint 21hcode endsend start3.运行结果分析图2-01所示汇编程序屏幕出现欢迎信息,提示输入第一个字符串输入第一个字符串“abcde”,提示驶入第二个字符串“efg”显示结果resule“-1”图2-04显示运行结果4.调试程序点击build---debug program即可进入调试窗口。

汇编语言指令大全

汇编语言指令大全

AAA 未组合的十进制加法调整指令AAA(ASCII Adgust for Addition)格式: AAA功能: 对两个组合的十进制数相加运算(存在AL中)的结果进行调整,产生一个未组合的十进制数放在AX中. 说明:1. 组合的十进制数和未组合的十进制数:在计算中,十进制数可用四位二进制数编码,称为BCD码.当一个节(8位)中存放一位BCD码,且放在字节的低4位, 高4位为时称为未组合的BCD码.2. AAA的调整操作若(AL) and 0FH>9 或 AF=1,则调整如下:(AL)<--(AL)+6,(AH)<--(AH)+1,AF=1, CF<--AF,(AL)<--(AL) and 0FHAAD 未组合十进制数除法调整指令AAD(ASCII Adjust for Division)格式: AAD功能: 在除法指令前对AX中的两个未组合十进制数进行调整,以便能用DIV指令实现两个未组合的十进制数的除法运算,其结果为未组合的十进制数,商(在AL中)和余数(在AH中). 说明:1. AAD指令是在执行除法DIV之前使用的,以便得到二进制结果存于AL中,然后除以OPRD,得到的商在AL中,余数在AH中.2. 示例: MOV BL,5MOV AX,0308HAAD ;(AL)<--1EH+08H=26H,(AH)<--0 DIV BL ;商=07H-->(AL),余数=03H-->(AH).AAM 未组合十进制数乘法调整指令AAM(ASCII Adjust MULtiply)格式: AAM功能: 对两个未组合的十进制数相乘后存于AX中的结果进行调整,产生一个未组合的十进制数存在AL中. 说明:1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整:乘积: (AH)<--(AL)/10(AL)<--(AL)MOD102. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数).AAS 未组合十进制减法调整指令 AAS(ASCII Adjust for Subtraction)格式: AAS功能: 对两个未组合十进制数相减后存于AL中的结果进行调整,调整后产生一个未组合的十进制数数且仍存于AL中. 说明:1. 本指令影响标志位CF及AF.2. 调整操作若(AL) and 0FH > 9 或 AF=1则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,否则(AL)<--(AL) and 0FHADC 带进位加法指令 ADC(Addition Carry) 格式: ADC OPRD1,OPRD2功能: OPRD1<--OPRD1 + OPRD2 + CF 说明:1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.4. 该指令对标志位的影响同ADD指令.ADD 加法指令 ADD(Addition)格式: ADD OPRD1,OPRD2功能: 两数相加说明:1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或有符号数的加法运算.AND 逻辑与运算指令 AND格式: AND OPRD1,OPRD2功能: 对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字的‘与’运算,OPRD1<--OPRD1 and OPRD2. 说明:1. 目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数,任一通用寄存器或存储器操作数.2. 示例: AND AL,0FH ;(AL)<--(AL) AND 0FHAND AX,BX ;(AX)<--(AX) AND (BX) AND DX,BUFFER[SI+BX]AND BETA[BX],00FFH注意: 两数相与,有一个数假则值为假CALL 过程调用指令 CALL格式: CALL OPRD 说明:1. 其中OPRD为过程的目的地址.功能: 过程调用指令 2. 过程调用可分为段内调用和段间调用两种.寻址方式也可以分为直接寻址和间接寻址两种.3. 本指令不影响标志位.CBW 字节扩展指令 CBW(Convert Byte to Word)格式: CBW功能: 将字节扩展为字,即把AL寄存器的符号位扩展到AH中. 说明:1. 两个字节相除时,先使用本指令形成一个双字节长的被除数.2. 本指令不影响标志位.3. 示例: MOV AL,25CBW IDIV BYTE PTR DATA1CLC 处理器控制指令-标志位操作指令格式:CLC ;置CF=0STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反CLD ;置DF=0STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.CLD 处理器控制指令-标志位操作指令格式:CLC ;置CF=0STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反CLD ;置DF=0STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.CLI 处理器控制指令-标志位操作指令格式:CLC ;置CF=0STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反CLD ;置DF=0STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1使CPU允许向应外部中断功能: 完成对标志位置位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.CMC 处理器控制指令-标志位操作指令格式: 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操CLC ;置CF=0STC ;置CF=1CMC ;置CF=(Not CF)进位标志求反CLD ;置DF=0STD ;置DF=1CLI ;置IF=0,CPU禁止响应外部中断STI ;置IF=1使CPU允许向应外部中断功能: 完成对标志位的置位、复位等操作. 作指令执行时,按增量的方式修改吕指针.CMP 比效指令 CMP(CoMPare)格式: CMP OPRD1,OPRD2功能: 对两数进行相减,进行比较. 说明:1. OPRD1为任意通用寄存器或存储器操作数.OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.2. 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,而只是比较.3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.CMPS 字符串比较指令格式: CMPS OPRD1,OPRD2CMPSBCMPSW功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.同时SI,DI将自动调整. 说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.CMPSB 字符串比较指令格式: CMPS OPRD1,OPRD2CMPSBCMPSW功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.同时SI,DI将自动调整. 说明:1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较CMPSW 字符串比较指令格式: CMPS OPRD1,OPRD2 说明:1. 其中OPRD2为源串符号地址,OPRD1CMPSBCMPSW功能: 由SI寻址的源串中数据与由DI 寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身. 同时SI,DI将自动调整. 为目的串符号地址.2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.CWD 字扩展指令 CWD(Convert Word toDouble Word)格式: CWD功能: 将字扩展为双字长,即把AX寄存器的符号位扩展到DX中. 说明:1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.2. 本指令不影响标志位.3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a、b、c,实现(a*b+c)/a运算。

汇编基础教程

汇编基础教程

汇编基础教程汇编语言是一种低级计算机语言,它能够直接操作计算机硬件并进行编程。

在计算机领域中,掌握汇编语言是非常重要的基础知识。

本教程将带您逐步学习汇编语言的基础知识,从而帮助您更好地理解计算机的工作原理并进行底层编程。

一、汇编语言的概述汇编语言是一种近似于机器语言的计算机语言,它通过使用助记符来代表机器指令,以便于程序员编写和理解。

汇编语言相对于机器语言而言,更容易阅读和编写,但仍然需要了解底层硬件结构和指令集架构。

二、汇编语言的基本结构1. 数据段:用于定义程序中所使用的数据,并分配内存空间。

2. 代码段:用于存放实际的汇编指令,控制程序的执行流程。

3. 堆栈段:用于存放函数调用、参数传递和局部变量等信息。

4. 其他段:可根据需要定义其他段,如常量段、字符串段等。

三、汇编语言的数据类型和寻址方式1. 数据类型:汇编语言支持的数据类型包括字节(BYTE)、字(WORD)和双字(DWORD)等。

2. 寻址方式:汇编语言提供多种寻址方式,包括直接寻址、寄存器间接寻址、基址变址寻址和相对寻址等。

四、汇编语言的指令集和常用指令1. 汇编语言的指令集包括数据传输指令、算术运算指令、逻辑运算指令、比较指令和跳转指令等。

2. 常用指令示例:- MOV指令:用于将一个数据从源操作数移动到目的操作数。

- ADD指令:用于将两个数据相加,并将结果存储到目的操作数中。

- SUB指令:用于将目的操作数减去源操作数,并将结果存储到目的操作数中。

- JMP指令:用于无条件跳转到指定的地址。

- CMP指令:用于比较两个数据的大小,并设置相应的条件码。

五、汇编语言的程序结构与流程控制1. 程序结构:一个汇编程序包括初始化、输入、处理和输出等模块。

2. 流程控制:汇编语言提供分支和循环结构来实现程序的流程控制,如条件判断和循环执行等。

六、汇编语言的调试和优化1. 调试:汇编语言程序的调试可以通过单步执行、断点设置和寄存器监视等方式进行。

汇编语言实验报告_6

汇编语言实验报告_6

青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。

然后在显示器输出排好序的数据, 中间用’,’隔开。

2.输出数据使用子程序方式。

算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。

(5)循环进入子程序, 输出原始数据。

(6)在子程序内循环输出每一位的十进制数字。

(7)主程序进行内外循环, 进行冒泡排序。

(8)再一次调用子程序输出排序后的结果。

调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。

所以前面必须加上MOV DX,OFFSET NOTE1。

(4)汇编语言是不会再输出汉字的。

(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。

调试结果:。

汇编比较大小的指令汇编入门第一篇小白也能看懂

汇编比较大小的指令汇编入门第一篇小白也能看懂

汇编比较大小的指令汇编入门第一篇小白也能看懂汇编语言是一种低级语言,它直接操作计算机底层的硬件,因此在性能和灵活性方面具有优势。

在汇编语言中,比较大小的指令是非常重要的,因为它们用于比较和判断两个数据的大小关系,从而控制程序的执行流程。

本文将介绍汇编比较大小的指令,希望能够帮助汇编语言入门的小白们更好地理解和应用。

一、比较指令在汇编语言中,常用的比较指令有CMP、TEST和CMPS等。

下面我们逐一介绍它们的使用方法和功能。

1. CMP指令CMP指令用于比较两个数据的大小,并根据比较结果设置标志位。

其语法格式如下:CMP destination, source其中,destination表示目标操作数,source表示源操作数。

CMP指令会将destination减去source的结果,并设置相关的标志位。

根据减法的结果,可以得到两个数据的大小关系。

例如,我们想比较寄存器AX的值和另一个数值x的大小关系,可以使用CMP指令如下:MOV AX, 10 ; 将AX寄存器的值设置为10CMP AX, x ; 将AX的值与x进行比较根据CMP指令执行后的标志位,可以使用其他指令来根据比较结果执行相应的操作,如跳转到指定位置或者进行条件循环等。

2. TEST指令TEST指令用于逻辑位操作,可以进行与、或和异或等操作,并根据操作结果设置标志位。

其语法格式如下:TEST operand1, operand2其中,operand1和operand2表示操作数。

TEST指令会对两个操作数进行位操作,并设置相应的标志位。

一般情况下,我们用TEST指令来检查一个寄存器或内存单元的某些位的状态。

例如,我们想检查寄存器AL的最高位是否为0,可以使用TEST指令如下:MOV AL, 0FFH ; 将AL寄存器的值设置为0FFHTEST AL, 80H ; 与80H进行位操作,检查最高位根据TEST指令执行后的标志位,我们可以使用条件跳转指令或条件设置指令来根据检查结果执行相应的操作。

20个简单汇编语言程序

20个简单汇编语言程序

20个简单汇编语言程序以下是20个简单的汇编语言程序示例:1. 计算两个数的和:MOV AX, 5。

ADD AX, 3。

这段代码将 5 存储在 AX 寄存器中,然后将 3 加到 AX 中,最终 AX 中的值为 8。

2. 比较两个数的大小:MOV AX, 5。

CMP AX, 3。

这段代码将 5 存储在 AX 寄存器中,然后将 AX 中的值与 3 进行比较。

3. 循环打印数字:MOV CX, 10。

MOV AX, 1。

LOOP_START:MOV DL, AL.ADD DL, 48。

MOV AH, 2。

INT 21h.INC AL.LOOP LOOP_START.这段代码使用循环打印数字 1 到 10。

4. 计算阶乘:MOV CX, 5。

MOV AX, 1。

LOOP_START:MUL CX.LOOP LOOP_START.这段代码计算 5 的阶乘,并将结果存储在 AX 寄存器中。

5. 判断奇偶数:MOV AX, 7。

AND AX, 1。

这段代码将 7 存储在 AX 寄存器中,然后将 AX 中的值与 1进行与运算,结果为 1,表示奇数。

6. 字符串反转:MOV SI, OFFSET str.MOV DI, OFFSET str.MOV CX, LENGTHOF str.DEC CX.REVERSE_LOOP:MOV AL, [SI]MOV DL, [DI+CX]MOV [DI+CX], AL.MOV [SI], DL.INC SI.LOOP REVERSE_LOOP.这段代码将字符串 `str` 反转。

7. 计算斐波那契数列:MOV CX, 10。

MOV AX, 0。

MOV BX, 1。

FIB_LOOP:ADD AX, BX.XCHG AX, BX.LOOP FIB_LOOP.这段代码计算斐波那契数列的前 10 个数。

8. 判断一个数是否为质数:MOV AX, 17。

MOV BX, 2。

CHECK_PRIME:XOR DX, DX.DIV BX.CMP DX, 0。

汇编语言小程序例子

汇编语言小程序例子

盛年不重来,一日难再晨。

及时宜自勉,岁月不待人。

1.编写统计AX中1、0个数的源程序。

1的个数存入CH,0的个数存入CL。

CODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。

程序:DATA SEGMENTR1 DB 'MATCH',0AH,0DHR2 DB 'NO MATCH',0AH,0DH STRING1 DB 'XXXXX'N1 EQU $-STRING1STRING2 DB 'YYYYY'N2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,[SI]MOV BH,[DI]INC SIINC DISUB AX,1JZ AA3CMP BL,BH JZ AA2JMP AA1AA3: LEA BX,R1 MOV CX,7 AA4: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2 MOV CX,10 AA5: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA5INT 21HCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。

汇编cmp指令

汇编cmp指令

汇编cmp指令汇编cmp指令是在汇编编程中使用的一种术语,是一种比较指令,它允许用户比较两个源地址或寄存器中的内容。

如果两个源地址或寄存器中的内容相同,则指令会返回一个特定的结果;如果两个源地址或寄存器的内容不同,则会返回另一个特定的结果。

一般来说,CMP指令会在字符串比较中使用。

汇编cmp指令用来比较两个地址或寄存器中的字节。

该指令可以通过比较两个值是否相等,来确定其结果。

当两个值相等时,结果为1;当两个值不等时,结果为0. CMP指令也可以用于比较大小。

在这种情况下,如果第一个值大于第二个值,则结果为1;如果第一个值小于第二个值,则结果为0.汇编cmp语句的语法结构通常是:CMP操作数1,操作数2。

其中,操作数1和操作数2可以是地址、立即值或寄存器。

第一种使用汇编cmp指令的场景是字符串比较。

在字符串比较中,cmp指令会比较两个非空字符串的字节是否相同。

如果相同,则会返回1;如果不同,则会返回0. 例如,如果需要比较字符串hello和world,可以使用以下指令:cmp helloworld。

另一种使用汇编cmp指令的场景是数值比较。

在数值比较中,cmp 指令会比较两个数值是否相等或是否有大小关系。

例如,如果需要比较数值5和10,可以使用以下指令:cmp 5,10。

此外,汇编cmp指令还可以用于位比较。

在位比较中,cmp指令会比较两个数值在特定位上是否相等。

例如,如果需要比较数值8和3的第3位,可以使用以下指令:cmp 8,3,3。

汇编cmp指令可以用来实现复杂的操作,比如比较两个数组是否相等,或者比较两个字符串是否相同等等。

汇编cmp指令对汇编编程具有重要作用,如果没有cmp指令,就会变得更加复杂。

总体而言,汇编cmp指令是一种重要的编程语言,它可以用来执行比较操作,比较数组或字符串是否相等,以及比较大小等。

CMP指令的性能很高,且在汇编编程中处处可见,是汇编编程的一个不可或缺的部分。

汇编语言cmp指令用法

汇编语言cmp指令用法

汇编语言cmp指令用法1. 什么是汇编语言?汇编语言是一种低级机器语言的抽象,它使用助记符(mnemonic)来代替二进制代码,使得程序员能够更容易地理解和编写机器指令。

汇编语言是计算机硬件和操作系统的接口语言,可以直接访问底层硬件资源。

2. cmp指令概述cmp指令是汇编语言中的一个重要指令,用于比较两个操作数的大小关系。

它通过比较两个操作数的值来设置标志位(flags),以供程序后续的条件跳转或条件执行。

3. cmp指令的语法格式cmp指令通常有两个操作数,分别为源操作数(source operand)和目标操作数(destination operand)。

其基本语法格式如下:cmp destination, source其中,destination为目标操作数,可以是寄存器或内存地址;source为源操作数,可以是寄存器、内存地址或立即数。

4. cmp指令的功能cmp指令执行时会将目标操作数与源操作数进行比较,并根据比较结果设置相应的标志位。

常见的标志位有零标志位(ZF)、进位标志位(CF)、符号标志位(SF)等。

•如果目标操作数等于源操作数,则设置ZF为1;否则,设置ZF为0。

•如果源操作数大于目标操作数,则设置CF为1;否则,设置CF为0。

•如果结果为负数,则设置SF为1;否则,设置SF为0。

5. cmp指令的应用场景cmp指令常用于条件跳转和条件执行的判断条件中。

通过比较两个操作数的大小关系,可以根据标志位来进行不同的控制流程。

5.1 条件跳转cmp指令与条件跳转指令(如je、jne、jl、jg等)结合使用,可以实现根据比较结果进行跳转的功能。

例如,以下代码片段中,如果eax寄存器的值等于ebx寄存器的值,则跳转到label处执行;否则,继续执行下一条指令。

cmp eax, ebxje label5.2 条件执行cmp指令与条件执行指令(如cmovl、cmovg等)结合使用,可以实现根据比较结果选择性地执行某一条指令。

汇编语言复习题(附答案)[1]

汇编语言复习题(附答案)[1]

汇编语言复习题注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。

在此文档最后最后附有课后四、六章的答案,大家抓紧时间复习哦!一、选择题1.把要执行的程序与库文件连接起来形成可执行文件的系统程序是( B ) 。

A.汇编程序B.连接程序C.机器语言程序D.源代码程序2.在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是( C )。

A..SS和SPB.DS和DIC.CS和IPD.ES和SI3.为了使主机访问外设方便起见,外设中的每个寄存器给予一个( C )。

A.物理地址B. 逻辑地址C. 端口地址D.段地址4.MOV AX,3064H,该指令中源操作数采用的寻址方式是( A )。

A.立即B.直接C.寄存器相对D.寄存器间接5.换码指令的助记符是( C )。

A. XCHGB. LEASC.XLATD. MOV6.如果A≥B(A、B有符号数)发生转移,应选择的条件转移指令是 ( JGE )。

7.下列符号中,可用作标识符的是( C )。

A.MOVB.AXC.MSG1D.1ABC8.X DB 10H DUP(1,2)内存变量定义语句拥有了( A )个字节的存储空间。

A.20DB.10DC.20HD.10H9.当DF=0时,执行串操作指令MOVSB,变址寄存器SI、DI的值将( C)。

A. 不变B.减1C.加1D.无法确定10.如下指令可将AX寄存器内容改变的是( A )。

A.AND AX , BX B.TEST AX , BX C.CMP AX ,BX D.XCHG AX , AX11.16位CPU支持的I/O地址范围是( D )。

A.0~0FFFFFH B.0~0FFFFH C.0~0FFFH D.0~0FFH12.MUL CL指令实现的功能是( A )。

A.无符号乘法:AX AL×CL B.有符号乘法:AX AL×CLC.无符号乘法:DX AL×CL D.有符号乘法:DX AL×CL13.DOS系统功能调用(INT 21H)中,显示字符串的功能号是( D )。

汇编语言x86汇编指令集大全

汇编语言x86汇编指令集大全

汇编语言x86汇编指令集大全汇编语言是计算机体系结构学科中的重要内容之一,它可以直接操作计算机硬件,实现对机器指令的精确控制。

而x86汇编则是汇编语言中最常用的一种,它广泛应用于各类个人电脑和服务器等计算设备中。

x86汇编指令集是汇编语言中的核心,掌握其基本指令对于开发高效的汇编程序至关重要。

本文将介绍x86汇编指令集的各个方面,包括数据传输指令、算术运算指令、逻辑运算指令、分支控制指令以及其他常用指令等内容,以帮助读者全面理解和掌握x86汇编语言。

一、数据传输指令数据传输指令是汇编语言中最基本的指令之一,用于实现数据在寄存器、内存和I/O端口之间的传递。

常见的数据传输指令包括MOV、XCHG、PUSH和POP等。

MOV指令用于将数据从一个位置传送到另一个位置,可以将数据从内存中传送到寄存器,也可以将数据从寄存器传送到内存。

例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。

XCHG指令用于交换两个操作数的值,例如,XCHG AX, BX表示交换寄存器AX和BX中的数据。

PUSH指令将数据推入堆栈,POP指令从堆栈中弹出数据。

这两个指令常用于函数调用和局部变量的保存与恢复。

二、算术运算指令算术运算指令用于执行各种数值计算操作,包括加法、减法、乘法、除法以及取模等。

常见的算术运算指令包括ADD、SUB、MUL、DIV和IMUL等。

ADD指令用于进行加法运算,可以将两个操作数相加,并将结果保存在目标操作数中。

例如,ADD AX, BX表示将寄存器BX中的值加到寄存器AX中。

SUB指令用于进行减法运算,可以将目标操作数减去源操作数,并将结果保存在目标操作数中。

MUL指令用于进行无符号数的乘法运算,可以将一个操作数与寄存器中的值相乘,并将结果保存在一对寄存器中。

DIV指令用于进行无符号数的除法运算,可以将寄存器中的值除以一个操作数,并将商保存在一个寄存器中,余数保存在另一个寄存器中。

IMUL指令用于进行有符号数的乘法运算,功能与MUL指令类似,但结果为有符号数。

【编程】python软件编程等级考试(二级)编程实操题03练习

【编程】python软件编程等级考试(二级)编程实操题03练习

【编程】python软件编程等级考试(二级)编程实操题03练习一、选择题1.运行下列 Python程序,结果正确的是( )a=32b=14c=a%bprint(c)A.2 B.4 C.32 D.142.如下Python程序段x = 0while x < 50:x = (x + 2) * (x + 3)运行后,x的值为()A.0 B.72 C.50 D.1683.在Python中,表达式2**3的结果是()A.5 B.8 C.6 D.34.在Python中print(8+7%2**2)的执行结果是()A.5 B.1 C.6 D.115.在教科书中利用Python探究电流和电压、电阻的关系实验里,除了可以通过书中的Jupyter Notebook外,处理数据还可以通过下列()工具实现。

A.Python IDLE B.Xmind C.网络画板D.几何画板6.除python语言之处,还有很多其他程序设计语言。

程序设计语言经历了从机器语言、汇编语言到高级语言的发展过程。

其中python语言是属于()。

A.机器语言B.高级语言C.汇编语言D.自然语言7.已知字符串s1="python",s2="Python",则表达式中s1>s2的值为()A.“python”B.“Python”C.True D.False8.Python使用函数()接收用输入的数据A.accept() B.input() C.readline() D.print()9.下列选项中,属于Python输入函数的是()。

A.random() B.print() C.Cout() D.input()10.在Python中,若x=10, y=20,下面程序段执行后,变量x、y的值分别是()x=yy=xA.10、 10 B.10、20 C.20、 20 D.20、 1011.已知字符串变量x的值是“H”,字符“A”的ASCII值是65,则python表达式chr(ord(x)+2)的值是()A.‘I’B.‘J’C.73 D.7412.Python中的数据类型float表示()A.布尔型B.整型C.字符串型D.浮点型13.下列不被python所支持的数据类型是()A.char B.float C.int D.list14.下面不是python特性的是():A.免费的B.简单易学C.可移植性好D.是低级语言15.运行下列Python程序,输出结果为0,则空白处应为()a=14b=7c=_______print(c)A.a-b B.a+b C.a/b D.a%b16.下列哪条赋值语句在Python中是非法的:()A.X=Y=Z=1 B.X=(Y=Z+1) C.X,Y=Y,X D.X+=Y17.有如下Python程序,当程序运行后输入15000,则程序输出结果为()A.2800 B.2800.0 C.12200 D.12200.018.在Python中,实现多分支选择结构的较好方法是()。

汇编cmp指令

汇编cmp指令

汇编cmp指令
汇编cmp指令是一个非常重要的汇编指令,它可以用来比较两个数据并返回其间的比较结果。

这个指令的历史可以追溯至 1970,那时,IBM System/360编器提供了最简单的cmp指令,该指令仅适用于比较两个相同长度的字符串。

cmp令是一个硬件特定的汇编指令,它可以用来比较两个操作数。

在比较过程中,系统将比较两个数据的值,根据比较的结果,它将返回三种结果,分别是:大于(>)、小于(、等于(=)。

这些结果将被传输到用于保存结果的状态标志寄存器中。

cmp令的典型用法是比较两个数据的大小。

要执行比较,我们可以使用 cmp令,它可以对两个操作数进行比较,如果第一个操作数大于第二个操作数,则将返回大于(>),反之,则返回小于(,如果两个操作数的值相等,则返回等于(=)。

另外,cmp令还可以用来比较字符串,它可以把字符串看成是一个数组,其中的每一位都有自己的值,它们从左到右逐位比较,如果发现其中一位的值更大,则直接返回大于(>),如果发现其中一位的值更小,则直接返回小于(,如果所有位都相等,则返回等于(=)。

同时,cmp令还可以用来比较浮点数,这类似于比较整数,但处理浮点数时需要注意,由于浮点数的精度可能不同,因此在比较浮点数时需要注意精度的问题。

最后,可以看出 cmp令是一个非常有用的汇编指令,它可以用来比较整数、字符串和浮点数,并能够正确地返回比较结果。

因此,
学习 cmp令可以为程序员提供很多帮助,有助于他们更好地理解汇编语言,并创建更为可靠、高效的程序。

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

实验二比较两个字符串的大小
一、实验要求
从键盘上输入两个字符串,比较两个字符串的大小。

如果第一个字符串比第二个字符串大,则显示1;如果两个字符串相等,则显示0;如果第一个字符串比第二个字符串小,则显示-1
(1)画出实现上述功能的汇编语言程序流程图
(2)写出实现上述功能的汇编语言程序
(3)编译,连接编写的汇编语言程序,并运行生成的可执行文件,描述其执行情况
(4)对上述程序进行调试
(5)描述反编译后的程序在执行前的数据段的内容何在调试过程中各寄存器的变化。

(6)写出实现上述要求的实验报告
二、实验环境
该试验包括的硬件和软件条件如下:
1、硬件环境
(1)联想AMD双核台式电脑
(2)内存1G
2、软件环境
Windows XP
三、实验步骤
1.程序流程图
2.程序代码
data segment
msg1 DB "Please input a string:",'$'
string1 DB 100,0,100 dup(?)
msg2 DB "Please input another string:",'$' string2 DB 100,0,100 dup(?)
msg3 db 0ah,0dh
result DW ?,'$'
Data ends
Stack segment para stack
db 20h dup(0)
Stack ends
code segment
Assume Cs:code,Ss:stack,ds:Data Start: mov ax,data
mov ds,ax
mov es,ax
lea dx,msg1
mov ah,09h
int 21h
lea dx,string1
mov ah,0ah
int 21h
xor bx,bx
mov bl,string1+1 lea dx,msg3
mov ah,09h
int 21h
lea dx,msg2
mov ah,09h
int 21h
lea dx,string2 mov ah,0ah
int 21h
lea dx,msg3
mov ah,09h
int 21h
cmp bl,string2+1 ja lop1
jb lop2
jmp lop3
lop1: mov cl,string2+1 jmp lop3
lop2: mov cl,string1+1 jmp lop3
lop3: mov cl,bl
cld
lea di,string2+2 lea si,string1+2 repz cmpsb
ja mat1
jb mat2
jz mat3
mat1: mov result,'1' lea dx,result
mov ah,09h
int 21h
jmp exit
mat2: mov result,'1-' lea dx,result
mov ah,09h
int 21h
jmp exit
mat3: mov result,'0' lea dx,result
mov ah,09h
int 21h
jmp exit
exit: mov ah,4ch
int 21h
code ends
end start
3.运行结果分析
图2-01所示汇编程序屏幕出现欢迎信息,提示输入第一个字符串
输入第一个字符串“abcde”,提示驶入第二个字符串“efg”
显示结果resule“-1”
图2-04显示运行结果
4.调试程序
点击build---debug program即可进入调试窗口。

如图2-05所示
在操作前,可以看到数据段内容为:
在初始化数据之后,寄存器如图2-07所示:
图2-07
此时寄存器如图2-08所示:
图2-08
继续向后执行,输入第一个“abcde”字符串后,数据段如下所示:
图2-09
此时寄存器如图2-10所示:
程序继续向后运行,输入第二个“efg”后,程序继续向后运行,当到“CMP”时,可以看到此时寄存器的数据段:
图2-11
此时寄存器状态如图2-12所示:
在程序运行到最后是,寄存器状态为:
由此寄存器中的cx由最初的5变成了4,即判断了字符串大小。

四、结论
通过本次实验,我学会了如何利用已经学会的语言命令来实现一些简单的程序,如何使用”CMPSB”来两个字符串比较大小的方法,同时通过对应实验书中的例题,同时也对汇编的上机编程有了更深入的了解。

相关文档
最新文档