汇编字符串比较
汇编语言指令大全-(1)

否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
说明:
1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.
2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.
3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.
3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.
CMPSW
字符串比较指令
格式: CMPS OPRD1,OPRD2
CMPSB
CMPSW
功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
同时SI,DI将自动调整.
说明:
1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.
2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.
3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.
DEC ALFA[DI+BX]
DIV
string数字比较大小规则

string数字比较大小规则在编程中,比较两个字符串中的数字大小是一种常见的操作。
字符串数字比较大小规则可以通过以下几个步骤实现:1. 按照字符串长度进行比较。
先比较字符串的长度,长度较长的字符串通常表示的数字较大。
2. 比较两个字符串中的每个字符。
从字符串的第一个字符开始逐个比较,如果对应字符的 ASCII 值较大,则表示该字符串表示的数字较大。
3. 考虑前导零。
如果两个字符串有前导零,则需要去除前导零后再进行比较。
例如,字符串 "02" 和 "001" 表示的数字相同,因为去除前导零后都是数字 2。
4. 特殊情况的处理。
在比较过程中,还需要考虑一些特殊情况。
例如,如果两个字符串中包含非数字字符,则需要先将其排除,再进行比较。
如果仅有一个字符串中包含非数字字符,则可以将不包含非数字字符的字符串视为较大。
下面是一个示例代码,演示了如何在 Python 中实现字符串数字比较大小规则:```pythondef compare_string_nums(str1, str2):# 去除前导零str1 = str1.lstrip('0')str2 = str2.lstrip('0')# 比较字符串长度if len(str1) > len(str2):return 1elif len(str1) < len(str2):return -1# 按字符比较for i in range(len(str1)):if str1[i].isdigit() and str2[i].isdigit():if str1[i] > str2[i]:return 1elif str1[i] < str2[i]:return -1# 处理特殊情况if not str1.isdigit() and str2.isdigit():return -1elif str1.isdigit() and not str2.isdigit():return 1return 0 # 字符串相等# 示例用法result = compare_string_nums("123", "45")print(result) # 输出 1,即第一个字符串表示的数字较大```通过按照以上规则,我们可以比较两个字符串中的数字大小。
字符串的比较c语言

字符串的比较c语言
在C语言中,可以使用字符串比较函数来确定两个字符串是否相等。
常用的字符串比较函数有strcmp、strncmp和memcmp。
以下是这些函数的介绍:
- strcmp函数:比较两个字符串s1和s2。
如果s1分别小于、匹配或大于s2,则返回一个小于、等于或大于0的整数。
- strncmp函数:比较两个字符串s1和s2的前n个字节。
如果s1的前n个字节分别小于、匹配或大于s2的前n个字节,则返回一个小于、等于或大于零的整数。
- memcmp函数:比较内存区域s1和s2的前n个字节。
如果s1的前n个字节分别小于、匹配或大于s2的前n个字节,则返回一个小于、等于或大于零的整数。
下面是一个使用strcmp函数的示例代码:
```c
#include < stdio.h>
#include < string.h>
int main()
{
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
printf("%d\n", result);
return 0;
}
```
该代码将输出两个字符串的比较结果,如果它们相等,则输出0;如果不相等,则输出一个非零值,具体结果取决于两个字符串的实际比较结果。
汇编:判断两个字符串是否相等(匹配)

汇编:判断两个字符串是否相等(匹配);编程从键盘输入两个字符串到内存缓冲区,并比较两个字符串是否相同;;如相同,输出match;如不同,输出no match。
;经修改的代码能够循环使用DATAS SEGMENTdata1 DB 100 DUP(?)data2 DB 100 DUP(?)string DB 0DH,0AH,$tital1 DB Please input the first string :,0DH,0AH,$tital2 DB Please input the second string :,0DH,0AH,$tital3 db Do you want to have a try again(if yes,input y,else input n ): ,0dh,0ah,$ result1 db match,0dh,0ah,$ result2 db no match,0dh,0ah,$temp DW 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV si,0tip1: ;输出抬头1LEA dx,tital1MOV ah,09hINT 21Hfirst: ;输入第一个字符串MOV ah,01h ;输入字符放在AL 中INT 21H ;以回车作为结束符cmp al,0dhje tip2MOV data1[si],AL;保存在内存中INC siJMP firsttip2:LEA dx,stringMOV AH,09HINT21HMOV temp,si ; 保存si 使得下一个字符串和它做比较MOV si,0 ;输出抬头2LEA dx,tital2MOV ah,09hINT 21Hsecond: ;输入第二个字符串MOV AH,01H ;输入字符放在AL 中INT 21H ;同样以回车作为结束符CMP AL,0DHje outputmovdata2[si],al ;保存到内存inc sijmp secondoutput:LEA dx,stringMOV AH,09HINT21HCMP temp,si ;判断长度是否相等JNE nomatchMOV si,0pipei:MOV AL,DATA1[si];判断是否每个字符都相等MOV AH,DATA2[si]INC siCMPAL,AHJNE nomatchCMP si,tempJE MATCHJMP pipeiMATCH: LEA DX,result1 ;不匹配就输出结论1 MOV AH,09H INT 21H JMP EXITnomatch:LEA DX,result2 ;匹配就输出结论2 MOV AH,09H INT 21HEXIT: ;询问是否要继续进行leadx,tital3 mov ah,09h int 21h mov ah,01h int 21h cmp al,y lea dx,string mov ah,09h int 21h je start cmp al,n je over jmp exitover: ;结束MOV AH,4CH INT 21HCODES。
《汇编语言程序设计》实验报告(一)

MESS2 DB 'NO MATCH!’,13,10,’$'
DATA ENDS
对以上源程序重新汇编、连接、运行,结果输出为:MATCH!
七、实验总结
通过这次上机实践,我对汇编程序和连接程序的使用开始有一点了解。但刚开始还是很不顺的,总是出现找不到文件,后来经过同学的指导,终于知道自己的错误,原来是路径错误。所以还需要勤加练习,多多实践。
四、实验材料、工具、或软件
多媒体计算机、WINDOWS XP系统或纯DOS系统、MASM6.11以上版本或汇编语言程序设计实验集成环境。
五、实验要求
1. 编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。
2.完成课堂例题,并用DEBUG运行,观察结果。
六、试验内容与步骤:(附上必要的调试过程及运行结果截图,可加附页)
试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。上机步骤如下:
《汇编语言程序设计》实验报告(一)
姓名
学号
系别
班级
指导教师
实验日期
课程名称
《汇编语言程序设计》
同组实验者
一、实验名称:实验一汇编程序和连接程序的使用
二、实验目的:
1. 熟悉汇编语言的上机环境;
2. 学习EDIT,MASM,LINK程序的使用;3. 掌握建立、汇、链接、运行汇编语言程序的过程。
用汇编语言编写比较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即可进入调试窗口。
九齐汇编例程

九齐汇编例程九齐汇编是一种汇编语言的集合,它包含了九个不同的汇编语言,这些语言各自具有不同的特点和用途。
在现代计算机时代,这些汇编语言已经渐渐被高级语言所代替,但是其仍具有很高的实用价值,在一些特定的场合下可以发挥很大的作用。
在学习九齐汇编的过程中,编写例程是一种非常有用的方法,它可以通过实际编写代码来加深对汇编语言的理解,并且可以在以后的程序编写中快速而准确地应用这些知识。
下面我们将分步骤阐述如何编写一些常见的九齐汇编例程。
1.复制内存将一段内存区域复制到另一段内存区域是汇编程序中经常使用的操作。
该操作可以使用MOV指令完成,其语法为MOV dest, src,其中dest和src表示目标和源地址。
以下为一段代码示例:MOV SI, 0MOV DI, 100hMOV CX, 100CLDREP MOVSB在这段代码中,SI和DI分别指向源内存和目标内存的起始地址,CX为需要复制的字节数,而MOVSB指令则将从SI中读取一个字节,并存储到DI指向的地址中,然后将SI和DI分别后移一个字节,重复此操作指定的次数CX。
2.求数组平均值计算一个数组中所有元素的平均值也是常见的需求。
该操作可以使用循环和累加求和的方式实现。
以下为一段代码示例:MOV CX, 10MOV SI, offset arrMOV AX, 0LOOP1:MOV BL, [SI]ADD AX, BXINC SILOOP LOOP1XOR DX, DXDIV CX在这段代码中,arr为一个10个字节的数组,循环从第一个元素开始遍历,将每个元素累加到AX寄存器中。
最后将AX中的值除以数组元素个数,得到平均值。
3.字符串比较比较两个字符串是否相等也是一个常见的操作。
该操作可以使用循环和逐字节比较的方式实现。
以下为一段代码示例:MOV SI, offset str1MOV DI, offset str2CMPSBJNE NOT_EQUALMOV AL, 1JMP END_CMPNOT_EQUAL:XOR AL, ALEND_CMP:在这段代码中,str1和str2分别为两个需要比较的字符串,使用CMPSB指令将两个字符串的第一个字符进行比较。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从键盘分别输入两个字符串(不必等长),然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MA TCH”。
CRLF MACRO
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
ENDM
S_SHOW MACRO STRING
MOV AH,9
MOV DX,OFFSET STRING
INT 21H
ENDM
S_IN MACRO BUFF
MOV AH,10
MOV DX,OFFSET BUFF
INT 21H
ENDM
DA TA SEGMENT
MESS1 DB 'MATCH',0DH,0AH,'$'
MESS2 DB 'NO MATCH',0DH,0AH,'$'
MESS3 DB 'INPUT STRING1:',0DH,0AH,'$'
MESS4 DB 'INPUT STRING2:',0DH,0AH,'$'
STR1 DB 100,?,100 DUP(0)
STR2 DB 100,?,100 DUP(0)
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
S_SHOW MESS3
S_IN STR1
CRLF
S_SHOW MESS4
S_IN STR2
CRLF
MOV CL,STR1+1
MOV SI,OFFSET STR1+2
AGAIN: MOV AL,[SI]
MOV CH, STR2+1
MOV DI,OFFSET STR2+2
NEXT: CMP AL,[DI]
JE MA TCH
INC DI
DEC CH
JNZ NEXT
INC SI
DEC CL
JNZ AGAIN
S_SHOW MESS2
JMP EXIT
MATCH: S_SHOW MESS1
EXIT:
MOV AH,01H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。
要求输入的数字字符串以回车键结束。
如果输入的数字超过4个,则以最后输入的4个为准。
若按下的键不是十六进制数字字符,则显示出错信息。
C_SHOW MACRO CHAR MOV AH,2
MOV DL,CHAR INT 21H
ENDM
S_SHOW MACRO STRING MOV AH,9
MOV DX,OFFSET STRING INT 21H
ENDM
S_IN MACRO BUFF
MOV AH,10
MOV DX,OFFSET BUFF
INT 21H
ENDM
DA TA SEGMENT
MESS1 DB 'Please input a hex number:',0AH,0DH,'$'
MESS2 DB 'Error!',0AH,0DH,'$'
INBUF DB 50,?,50 DUP(0)
FLAG DB 0 ;错误标志
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
S_SHOW MESS1
S_IN INBUF
C_SHOW 0DH
C_SHOW 0AH
CALL GETNUM
CMP FLAG,1
JE ERROR
CALL NUMSHOW
JMP EXIT
ERROR: S_SHOW MESS2
EXIT: MOV AH,4CH
INT 21H
GETNUM PROC
MOV SI,OFFSET INBUF+2
MOV AH,0
MOV AL,INBUF+1
ADD SI,AX
SUB SI,4
MOV CX,4
MOV BX,0
NEXT: MOV AL,[SI]
CMP AL,'0'
JB FLAG1
CMP AL,'9'
JA NO_0_9
SUB AL,30H
JMP NEXT1
NO_0_9: CMP AL,'A'
JB FLAG1
CMP AL,'F'
JNA IS_A_F
CMP AL,'a'
JB FLAG1
CMP AL,'f'
JA FLAG1
SUB AL,57H
JMP NEXT1
IS_A_F: SUB AL,37H
NEXT1: PUSH CX
MOV CL,4
SHL BX,CL
ADD BL,AL
INC SI
POP CX
LOOP NEXT
RET
FLAG1: MOV FLAG,1
RET
GETNUM ENDP
NUMSHOW PROC
MOV CX,16
SNEXT: SHL BX,1
JNC S_0
C_SHOW '1'
JMP SNEXT1
S_0: C_SHOW '0'
SNEXT1: LOOP SNEXT
C_SHOW 'B'
RET
NUMSHOW ENDP
CODE ENDS
END START
从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。
关系如下:
十六进制数字字符字符对应的ASCII码数字对应的二进制数
0 ~9 30H ~39H ASCII码- 30H
A ~F 41H ~46H ASCII码- 37H
a ~f 61H ~66H ASCII码- 57H。