用汇编语言编写比较2个字符串长度的程序
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,能够帮助程序员更好地操作数据,编写出性能更优越的程序。
汇编语言实验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. 字符串拼接程序首先,需要从键盘输入两个字符串。
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’。
用汇编语言编写比较2个字符串长度的程序
用汇编语言编写比较2个字符串长度的程序一、实验题目:比较两个字符串.假设两个字符串分别放在DS段(设ES=DS)的STR1和STR2区域,其长度分别为L1和L2,比较这两个字符串相等.若相等,则置M1单元内容为FFH,否则为00H.二、实验目的:掌握提示信息的设置方法及键盘读取输入信息的方法。
三、实验原理:1、利用16位微机处理器8680/8088系统汇编语言的基本法则、表达式、运算符、常用伪指令和dos功能调用及汇编设计的基本方法;2、汇编语言程序的分段结构、语句格式、表达式和运算符;3、变量定义伪指令、段指令伪指令以及其他常用伪指令的功能;4、顺序、分支、循环、子程序等四类结构程序的特点和编程方法。
四、实验程序设计:DA TA SEGMENTSTRING1 DB ‘ASFIOA’STRING2 DB ‘XCVIYOAF’MESS1 DB ‘FFH$’MESS2 DB ‘00H$’DA TA ENDSCODE SEGMENTMAIN PROC FARASSUME CS: CODE, DS: DATASTART: PUSH DSSUB AX, AXPUSH AXMOV AX, DATAMOV DS, AXMOV ES, AXBEGIN: MOV CX, STRING2-STRING1MOV BX,MESS1-STRING2CMP BX, CXJNZ DISPNOLEA DX, ADDRLEA SI, STRING1LEA DI, STRING2REPE CMPSBJNE DISPNOMOV AH, 9LEA DX, MESS1INT 21HRETDISPNO: MOV AH, 9LEA DX, MESS2INT 21HRETMAIN ENDPCODE ENDPEND START 五、实验流程图如下:。
汇编语言比较两个字符串的大小
实验二比较两个字符串的大小一、实验要求从键盘上输入两个字符串,比较两个字符串的大小。
如果第一个字符串比第二个字符串大,则显示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即可进入调试窗口。
微机原理及应用试卷编程题
一.编程题 (共43题,430分)1.1 [库中题号:060030] 10分编写完整的8086汇编程序:将字符缓冲区A的字符'1234567890'倒序存放到缓冲区B中。
1.2 [库中题号:060029] 10分编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。
加密表为;输入数字: 0,1,2,3,4,5,6,7,8,9密码数字: 7,5,9,1,3,6,8,0,2,41.3 [库中题号:060028] 10分试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。
两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。
1.4 [库中题号:060027] 10分把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。
另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。
试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。
1.5 [库中题号:060026] 10分已知整数变量A和B,试编写完成下述操作的程序:(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中;(2)若两个数均为奇数,则两数分别加1,并存回原变量;(3)若两个数均为偶数,则两变量不变。
1.6 [库中题号:060025] 10分试编写完整的程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息:(1)如果3个数都不相等则显示0;(2)如果3个数中有2个数相等则显示2;(3)如果3个数都相等则显示3。
汇编输入两个数比较大小
任意输入两个数(不超过16位),把大的输出,如果两个数相等则输出任意一个代码如下:data segmentA dw 0B dw 0string1 db"please input your first number:$"string2 db"please input your second number:$"string3 db"the big is:$"data1 db 5 dup(0),"$";十六进制-->十进制转换时,保存余数的缓冲区inputdata db 5,?,5 dup(0);输入数据缓冲区data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,string1;提示输入A并回车换行call display2call DtoBmov A,axlea dx,string2;提示输入B并回车换行call display2call DtoBmov B,axlea dx,string3call display2cmp ax,AJG L1JL L2L3:JMP L4L1:call BtoDjmp L3L2:mov ax,Acall BtoDjmp L3display1 procmov ah , 02h ;回车换行mov dl , 0ahint 21hmov ah , 02hmov dl , 0dhint 21hretdisplay1 endpdisplay2 proc ;显示字符串push ax ;保护现场push dx ;保护入口参数call display1 ;回车换行pop dxmov ah , 09h ;显示提示字符串int 21hpop ax ;恢复现场retdisplay2 endpDtoB proc ;十进制装化成十六进制push dx ;保护现场——程序中所使用到的寄存器push sipush bxpush cxlea dx , inputdata ;输入十进制字符串mov ah , 0ahint 21hmov si , 0 ;取字符串中字符的指针mov ax , 0 ;累加结果mov bx , 10 ;基数10mov cl , inputdata+1;字符串长度送入cx,若为0,则直接退出,赋值result 为0mov ch , 0jcxz exitagain: mul bx ;ax*bx=dx:ax,这里输入为0~65535,乘积不会超过16位数据,dx必定为0mov dl , inputdata[si+2] ;取输入的字符,转换为数值,累加到部分和sub dl , 30hmov dh , 0add ax , dxinc siloop againpop cx ;恢复现场——逆序出栈pop bxpop sipop dxexit: retDtoB endpBtoD proc ;十六进制转化成十进制数据push cxpush sipush dxmov cx , 10 ;数制转换的基数lea si , data1+4 ;si指针指向缓冲区末尾,依次减量,使余数倒序排列again: mov dx , 0 ;除法转换,要使用32位被除数,dx为无符号数的0扩展,每次除法都要进行扩展div cx ;除法后,ax为商,准备下次除法;dx为余数,值为0~9,dl可以保存于string中,用于显示add dl , 30h ;将余数转换为字符,保存于si指定的单元mov [si] , dldec si ;指针修改,准备存放下一个余数cmp ax , 0 ;直到商为0,转换结束jz overjmp againover: mov dx , si ;使用09号DOS功能调用,显示转换后的字符串inc dx ;遇到$结束mov ah , 09hint 21hpop dxpop sipop cxretBtoD endpL4:mov ah,4chint 21h code endsend start结果如下:。
第5章 习题及答案
第五章 汇编语言程序设计1、画图说明下列语句所分配的存储器空间及初始化的数据值。
难度:2(1) BYTE_VAR DB ‘BYTE’,12,-12H ,3 DUP(0,2 DUP(1,2),7) (2) WORD_VAR DW 3 DUP(0,1,2),7,-5,’BY’,’TE’,256H 答:(1) (2)07H BYTE_V AR 42H WORD_V AR 00H 00H 59H 00H FBH 54H 01H FFH 45H 00H 59H 0CH 02H 42H EEH 00H 45H 00H 00H 54H 01H 00H 56H 02H 01H 02H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H07H00H2、假设程序中的数据定义如下: PARTNO DW ?PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为22,它表示当前已分配单元空间。
《微型计算机原理》第5章习题与解答3、有符号定义语句如下:难度:2BUF DB 1,2,3,’123’EBUF DB 0L EQU EBUF-BUF问:L的值是多少?答:L的值为6;4、假设成序中的数据定义如下:难度:2LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址存入BX。
(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3)写一条伪指令定义符使CODE_LENGTH的值等于 CODE_LIST域的实际长度。
《微机原理及接口技术》复习总结综合版——简答题
《微机原理及接口技术》复习总结综合版——简答题第一篇:《微机原理及接口技术》复习总结综合版——简答题综合版—简答题欢迎使用KNKJ2012DXZY系统《微机原理及接口技术》学科复习综合版—简答题1、微型计算机由那些基本功能部件组成?微处理器、主存储器、系统总线、辅助存储器、输入/输出(I/O)接口和输入/输出设备2、什么是(计算机)总线?在计算机中,连接CPU与各个功能部件之间的一组公共线路,称为总线3、微型计算机系统的基本组成?微型计算机,系统软件,应用软件,输入输出设备4、简述冯.诺依曼型计算机基本组成。
冯.诺依曼型计算机是由运算器,控制器,存储器,输入设备和输出设备组成的。
其中,运算器是对信息进行加工和运算的部件;控制器是整个计算机的控制中心,所以数值计算和信息的输入,输出都有是在控制器的统一指挥下进行的;存储器是用来存放数据和程序的部件,它由许多存储单元组成,每一个存储单元可以存放一个字节;输入设备是把人们编写好的程序和数据送入到计算机内部;输出设备是把运算结果告知用户。
5、什么是机器数?什么是机器数的真值?数在机器内的表示形式为机器数。
而机器数对应的数值称为机器数的真值。
6、8086与8088这两个微处理器在结构上有何相同点,有何主要区别?相同点:(1)内部均由EU、BIU两大部分组成,结构基本相同。
(2)用户编程使用的寄存器等功能部件均为16位。
(3)内部数据通路为16位。
区别 :(1)对外数据总线8086:16位,8088:8位。
(2)指令队列8086:6级,8088:4级。
7、8086CPU内部由哪两部分组成?各完成什么工作?在8086内部由BIU和EU两大部分组成,BIU主要负责和总线打交道,用于CPU与存储器和I/O接口之间进行数据交换;EU主要是将从指令队列中取得的指令加以执行。
8、简述8086内部分为EU和BIU两大功能的意义。
这两部分分开可以在执行指令的同时,从存储器中将将要执行的指令取到指令队列,使两部分并行工作,提高CPU的速度。
汇编比较大小的指令汇编入门第一篇小白也能看懂
汇编比较大小的指令汇编入门第一篇小白也能看懂汇编语言是一种低级语言,它直接操作计算机底层的硬件,因此在性能和灵活性方面具有优势。
在汇编语言中,比较大小的指令是非常重要的,因为它们用于比较和判断两个数据的大小关系,从而控制程序的执行流程。
本文将介绍汇编比较大小的指令,希望能够帮助汇编语言入门的小白们更好地理解和应用。
一、比较指令在汇编语言中,常用的比较指令有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个简单的汇编语言程序示例: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个二进制位依次输出。
汇编语言程序汇总
例:延时程序,多重循环实现软件延时。 DELAY:MOV DX,3FFH TIME:MOV AX,0FFFFH TIME1:DEC AX NOP JNE TIME1 DEC DX JNE TIME RET
内循环控制变量AX,初值=FFFFH 外循环控制变量DX,初值=3FFH
五、字符串处理程序
字符:ASCII码 说明:
MOV PRODUCT[BX+2], AX
MOV PRODUCT[BX+4], DX
PUSHF
; 保存后一次相加的进位标志
MOV AX, MULNUM[BX+2] ; A→AX
MUL DI
; A×C
POPF;标志出栈
ADC DX,0 ADC AX, PRODUCT[BX+4] ; 与部分积4的相应部分相加 ADC DX, 0 MOV PRODUCT[BX+4], AX MOV PRODUCT[BX+6], DX RET START ENDP CODE ENDS END BEGIN
START PROC FAR
; 定义子程序
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: PUSH DS
;(4)置子程序返回地址
MOV AX,0
PUSH AX
MOV AX,DATA
;置DS
MOV DS,AX
MOV AX,STACK
;置SS
MOV SS,AX
MOV AX,TOP
mov dl,0 ;串长度初始DL=0
mov al,cr ;结束符→AL
again:scasb
;搜索串
je done;找到转DONE,停止搜索
inc dl
汇编语言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等)结合使用,可以实现根据比较结果选择性地执行某一条指令。
IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明))
第五章5、1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
答:程序段如下: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: RET5、2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符与后续字符,再按顺序显示这三个字符。
答:程序段如下: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: RET5、3 将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: RET5、4 试编写一程序,要求比较两个字符串STRING1与STRING2所含字符就是否完全相同,若相同则显示‘MATCH’, 若不相同则显示‘NO MATCH’。
编程题 试卷2
一、分析题(每题4分,共500分)1. 编写一完整程序,比较两个字符串STR1和STR2所含字符是否完全相同,如果相同(AL)=1,不相同(AL)=0.2. 编写一段程序统计BUF缓冲区100个字数据中为0的个数,并将统计结果保存在DL 中。
3. 比较5个字节的字符串A和B,若两个字符串不相等则字节标志单元FLG置1;否则清0。
4. 设STR开始有一个长度为50个字节的字符串,编一段程序,将字符串的所有字符向后(大地址)移动20个字节。
5. 已知在AX、BX中放有一个32位二进制数,求其补码,并送入CX、DX之中,其中AX、CX放高位。
6. 在A字单元有一个有符号被除数,在B字单元有一个有符号除数,求其商存于C字单元中,余数存D字单元中,试编程实现之。
7.8. 编写一个完整的程序放在代码段CSEG中,要求把数据段中两个字单元X和Y•的内容相加,结果放在AX中.9. 试编写一程序段把40个字母A的字符串从源缓冲区传送到目的缓冲区。
10. 在A地址处有10个数据,现要求传送到B地址处,请编程实现。
11. 在A、B地址起各有4个字节单元的无符号数,试编程实现二个无符号数的和,并将值存于C址起的单元中。
12. 按下面要求写出程序的框架:①定义一个数据段,其中开辟100个字单元、初值为0;②定义一个代码段,并在其中指定段寄存器、指定主程序从0100H开始、•给有关段寄存器赋值;③程序结束。
13. 编制将DS段中名为BUFB的字节存储区改写为空白字符(编码为20H)的程序段。
假定BUFB存储区定义为BUFB DB N DUP('^'),其中N为字面常量。
14. 将BUF中的16位数分成四组,每组四位,然后把这四组数分别存放在A、B、C、D字节变量中。
15. 编一段程序把BX中的二进制数用十六进制数的形式在屏幕上显示出来.16. 在附加段有一个字数组,其首地址已存放在DI寄存器中,在数组的第一个字中存放着该数组的长度.要求编制一个程序使该数组中的数按照从小到大的次序排列整齐.(起跑排序算法)17. 在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中.18. 在STR 字符串中搜索字符A。
汇编语言程序设计实验报告
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
微机原理与接口技术实验
实验一熟悉汇编语言环境及建立汇编的过程一、实验目的1.熟悉汇编语言环境。
2.掌握汇编语言的上机过程。
3.了解汇编语言程序的编程格式。
4.学习数据传送和算术运算指令的用法。
5.熟悉在PC机上建立汇编链接调试和运行汇编语言程序的过程。
二、实验要求1.通过一个小程序的编写达到以上的实验目的。
2.并完成两个多位十进制数相加的实验。
三、实验原理1.汇编语言程序的上机过程用汇编语言编写的程序称为源程序,源程序也不能由机器直接执行,而必须翻译成机器代码组成的目标程序,这个翻译过程称为汇编。
在微型机中,当前绝大多数情况下,汇编过程是通过软件自动完成的,用来把汇编语言编写的程序自动翻译成目标的软件叫汇编程序,汇编过程如下:2.汇编、连接过程将两个多位十进制数相加。
要求加数和被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
3.ADC 带进位相加指令的功能和指令格式AAA 、DAA、 AAS、 DAS指令的功能和指令格式4.伪指令SEGMENT 、ENDS、 ASSUME、MACRO、ENDM的使用子程序的定义(PROC NEAR/FAR ENDP),以及子程序调用和返回指令:CALL、RET 的使用5.循环指令LOOP的格式以及退出循环的条件6.中断指令的使用四、实验步骤一、学习汇编过程1.打开编辑环境2.输入程序CODE SEGMENTASSUME CS:CODESTART:MOV AL,01HMOV BL,40HADD AL,BLMOV DL,ALMOV AH,02HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.保存源程序,以.ASM为扩展名。
C:\MASM\1.ASM4.建立汇编过程(1)用宏汇编程序汇编源程序C:\MASM>MASM 1.ASM汇编程序有3个输出文件【.obj】文件,【.LST】文件,【.CRF】文件,.OBJ文件是我们所需要的文件。
第四章 汇编语言程序设计基础
4.2.2 分支程序的设计方法 ★条件控制 ★逻辑尺控制 ★地址跳转表控制
1. 条件控制——利用比较和条件转移指令实现分支,是最常用的 程序设计方法。
பைடு நூலகம்
例如,求解函数:
练习题2. 编写程序,比较两个字符串STRING1和STRING2所 含字符是否完全相同,若相同则显示“MATCH”,若不同则显示 “NO MATCH”。 答案: datarea segment string1 db ‘asfioa’ ;定义字符串STRING1 string2 db ‘xcviyoaf’ ;定义字符串STRING2 mess1 db ‘MATCH’,’$’ ;定义显示字串“MATCH” mess2 db ‘NO MATCH’,’$’ ;定义显示字串“NO MATCH” datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds ;将ds:00入栈 sub ax,ax push ax mov ax,datarea ;装填数据段及附加段 mov ds,ax mov es,ax
程序流程图
mov ch,4 rotate: mov cl, 4 rol bx,cl mov al,bl and al,0fh add al,30h ;’0’-’9’ ASCII 30H-39H cmp al,3ah jl printit add al,7h ;’A’-’F’ ASCII 41H-46H printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate
例4.3 将首地址为A的N字数组按照从小到大的次序整序(气 泡算法,多重循环) A dw 32,85,16,15, 8
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用汇编语言编写比较2个字符串长度的程序
一、实验题目:
比较两个字符串.假设两个字符串分别放在DS段(设ES=DS)的STR1和STR2区域,其长度分别为L1和L2,比较这两个字符串相等.若相等,则置M1单元内容为FFH,否则为00H.
二、实验目的:
掌握提示信息的设置方法及键盘读取输入信息的方法。
三、实验原理:
1、利用16位微机处理器8680/8088系统汇编语言的基本法则、表达式、运算符、常用伪指令和dos功能调用及汇编设计的基本方法;
2、汇编语言程序的分段结构、语句格式、表达式和运算符;
3、变量定义伪指令、段指令伪指令以及其他常用伪指令的功能;
4、顺序、分支、循环、子程序等四类结构程序的特点和编程方法。
四、实验程序设计:
DA TA SEGMENT
STRING1 DB ‘ASFIOA’
STRING2 DB ‘XCVIYOAF’
MESS1 DB ‘FFH$’
MESS2 DB ‘00H$’
DA TA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS: CODE, DS: DATA
START: PUSH DS
SUB AX, AX
PUSH AX
MOV AX, DATA
MOV DS, AX
MOV ES, AX
BEGIN: MOV CX, STRING2-STRING1
MOV BX,MESS1-STRING2
CMP BX, CX
JNZ DISPNO
LEA DX, ADDR
LEA SI, STRING1
LEA DI, STRING2
REPE CMPSB
JNE DISPNO
MOV AH, 9
LEA DX, MESS1
INT 21H
RET
DISPNO: MOV AH, 9
LEA DX, MESS2
INT 21H
RET
MAIN ENDP
CODE ENDP
END START 五、实验流程图如下:。