首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

几道简略的汇编程序

2012-11-09 
几道简单的汇编程序搜索数组,看是否存在CONSTDATA SEGMENTARRAYB DB 2,3,1,8,7FH,-5COUNT EQU $-ARRAYB

几道简单的汇编程序

;搜索数组,看是否存在CONSTDATA SEGMENTARRAYB DB 2,3,1,8,7FH,-5COUNT EQU $-ARRAYB ;数组长度CONST EQU 7FH        ;判断数组中是否存在此元素ADDRES DD 0        ;若存在,存放元素的地址SCANTIME DW 0      ;若存在,存放搜索次数DATA ENDSSTACK SEGMENTDW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME SS:STACK,DS:DATA,CS:CODEMAIN:MOV AX,DATAMOV DS,AXMOV ES,AX ;目的串的段基址总是存放在ESLEA DI,ARRAYB;目的串的偏移首地址存在DI/EDIMOV CX,COUNT;设置循环次数MOV AL,CONST;数组元素与AL的内容比较CLD         ;设置DF标志位OR CX,CX    ;设置ZF=0REPNE SCASB ;若果不相等,则继续搜索JZ SCANED   ;ZF==1表示找到相等的元素JMP  @F     ;没找到相等的元素SCANED:DEC DI    MOV WORD PTR ADDRES,DI    MOV WORD PTR ADDRES+2,ES;把元素地址存入ADDRES    MOV BX,OFFSET ARRAYB    INC DI    SUB DI,BX    MOV SCANTIME,DI;计算搜索次数    MOV DX,SCANTIME    ADD DX,30H    MOV AH,2    INT 21H    @@: MOV AH,4CH    INT 21HCODE ENDS    END MAIN

?

?

?

?

;将ES段中名为BLOCK的字存储区清零.DATA SEGMENTBLOCK DW 5 DUP(1)DATA ENDSSTACK SEGMENTDB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN:    MOV AX,DATA    MOV DS,AXMOV AX,SEG BLOCKMOV ES,AXMOV DI,0MOV CX,LENGTH BLOCKGOON:     MOV BLOCK[DI],0       ADD DI,TYPE BLOCK        LOOP GOON      MOV AX,4C00H     INT 21HCODE ENDS     END MAIN

?

?

?

;求Z=|X-Y|.其中X,Y均为无符号数DATA SEGMENT X DW 5Y DW 9DATA ENDSSTACK SEGMENTDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME SS:STACK,DS:DATA,CS:CODEMAIN:   MOV AX,DATA   MOV DS,AX   MOV AX,X   SUB AX,Y   JC NEXT   JMP DONENEXT:NEG AXDONE:MOV DX,AX     ADD DX,30H     MOV AH,2     INT 21H     MOV AH,4CH     INT 21H     CODE ENDSEND MAIN

?

?

?

;求X与Y之和并送ZDATA SEGMENT;X DW 0E98AH,80AFH,0FD32H,0F68FH;Y DW 9FD0H,70BAH,3D84H,89FEHX DW 3 ;为了显示结果,把变量值改为3和5Y DW 5Z DW 5 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATAMAIN:    MOV AX,DATA    MOV DS,AX    SUB DI,DI    MOV CX,1    CLCGOON:MOV AX,X[DI]     ADC AX,Y[DI]     MOV Z[DI],AX     ADD DI,2     LOOP GOON     RCL AX,1     AND AX,1     MOV Z[DI],AX     ;显示结果     MOV DL,BYTE PTR Z     ADD DL,30H     MOV AH,2     INT 21H         MOV AH,4CH     INT 21HCODE ENDS     END MAIN

?

?

;输入字符串,然后显示输入的字符串DATA SEGMENTBUF DB 50    DB ?    DB 50 DUP('$');总长度为52CR EQU 0DHLF EQU 0AHMESG1 DB 'PLEASE INPUT A STRING:',CR,LF,'$'DATA ENDSSTACK SEGMENTDW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME SS:STACK,DS:DATA,CS:CODEMAIN:    MOV AX,DATA    MOV DS,AX    MOV DX,OFFSET MESG1    MOV AH,9    INT 21H;提示输入    LEA DX,BUF    MOV AH,10    INT 21H ;等待输入        MOV DL,LF    MOV AH,2    INT 21H;输出换行        LEA DX,BUF+2    MOV AH,9    INT 21H;输出字符串    MOV AH,4CH    INT 21HCODE ENDS     END MAIN

?

?

?

;删除输入字符串中的'A'字符,然后输出删除后的字符串。;若字符串中不存在'A',则输出'NOT FOUND'DATA SEGMENTBUF DB 50,?,50 DUP('$')MESSAGE DB 'NOT FOUND',0AH,'$'FLAG DB 0DATA ENDS   STACK SEGMENTDW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME SS:STACK,DS:DATA,CS:CODEMAIN:    MOV AX,DATA    MOV DS,AX    MOV DX,OFFSET BUF    MOV AH,10    INT 21H;读入字符串        MOV DL,0AH    MOV AH,2    INT 21H;输出换行符        MOV AX,DATA    MOV ES,AX;段地址存入ES    LEA DI,BUF;偏移首地址    MOV AL,'A';与'A'比较    MOV CX,WORD PTR BUF[1];循环次数    CLD;设置DF标志位0GOON:        OR CX,CX;设置ZF=0     CMP [BUF+DI],AL    JNZ NEXT;如果不同,进入下一次循环    MOV [BUF+DI],'0'    INC FLAG[0]NEXT:INC DI      LOOP GOON        OR CX,1    CMP FLAG[0],1    JNZ MES        LEA DX,MESSAGE    MOV AH,9    INT 21H;没找到时输出NOT FOUND    JMP DONE    MES:MOV CL,[BUF+1]    MOV DI,OFFSET BUF+2SIGN:OR CX,CX    CLD    MOV DL,[BUF+DI]    CMP DL,'0';是0的话不输出    JZ NO;    MOV AH,2    INT 21HNO: INC DI    LOOP SIGN;输出字符串               DONE:MOV AH,4CH    INT 21H  CODE ENDS     END MAIN

??

?

?

?

;对395872843948这些0--9的数字进行冒泡排序DATA SEGMENTARRAY DB '395872843948',0DH,0AH,'$'DATA ENDSSTACK SEGMENTDB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATAMAIN:    MOV AX,DATA    MOV ES,AX    MOV DS,AX    MOV CX,12;要比较的次数    MOV BX,12;每次要比较的个数INIT:    MOV DI,0 ;偏移首地址    MOV BX,CX          GOON:    MOV AL,ARRAY[DI]    CMP AL,ARRAY[DI+1]    JG NEXT    XCHG AL,ARRAY[DI+1]    MOV ARRAY[DI],AL;交换NEXT:INC DI     DEC BX     JNZ GOON;不相等     LOOP INIT;完成一趟排序         MOV DX,OFFSET ARRAY     MOV AH,9     INT 21H;输出排好序的序列       MOV AH,4CH     INT 21HCODE ENDS     END MAIN

?

热点排行