视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
汇编经典代码
2025-09-22 17:51:41 责编:小OO
文档
1.顺序程序设计

将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

 DATA  SEGMENT

    DATA1   DB   34H,35H,39H,38H,36H,' '  ;被加数

    DATA2    DB     37H,34H,33H,36H,32H,' '  ;加数

 DATA  ENDS

 CODE  SEGMENT

     MAIN  PROC  FAR

        ASSUME  CS:CODE,DS:DATA

     START:  MOV  AX,DATA

       MOV  DS,AX

      LEA    SI,DATA1      ;有效地址送SI,为调用显示子程序做准备

      CALL  DISPLAY        ;调用显示子程序

      CALL  CRLF        ;调用回车换行子程序

      LEA    SI,DATA2  ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备

      CALL  DISPLAY        ;调用显示子程序

      CALL  CRLF        ;调用回车换行子程序

      LEA    DI,DATA1      ;有效抵制送DI,为加法运算做准备

      MOV  AX,0                        

      MOV  BX,0                          

      MOV  CL,05H        ;记录循环次数

     ADDS: MOV  AL,[SI]        ;将加数送往AL                

      SUB    AL,30H                        

      ADD  AL,BL        ;加上进位                      

      MOV  BL,[DI]        ;将被加数送往BL                

      SUB    BL,30H                        

      ADD  AL,BL        ;加法运算                

      ADD  AL,30H                        

      CMP  AL,3AH                        

      JA    SUBA        ;结果>=10,跳到SUBA

      JB    NSUBA                        

     SUBA:  SUB    AL,0AH        ;减去10的值,并置BL为1                    MOV  BL,01H                        

      JMP    CONTINUE                        

    NSUBA:  MOV  BL,00H        ;置BL为0                

  CONTINUE:MOV  [DI],AL        ;将相加的结果从AL送往DI的地址,即DATA1的地址  

        INC    DI        ;地址加1                

        INC    SI        ;地址加1                

      LOOP  ADDS        ;循环                

      JC    SHUCHU                        

      JNC    SHUCHU2                        

   SHUCHU2: MOV  AL,31H        ;CF为1设置结果最高位为1                    JMP    CONTINUE2                        

    SHUCHU:MOV  AL,30H        ;CF为0设置结果最高位为0              

 CONTINUE2:MOV  [DI],AL                        

       LEA    SI,DATA1      ;将DATA1的有效地址送往SI,为调用DISPLAY子程序做准备      CALL  DISPLAY        ;调用DISPLAY子程序                      MOV  AX,4C00H      ;返回DOS                            INT  21H                        

MAIN    ENDP  

                      

CRLF    PROC  NEAR        ;回车、换行 于功能                                    MOV  DL,0DH                        

      MOV  AH,02H                                                               INT    21H                                                                  MOV  DL,0AH                        

      MOV  AH,02H                                                               INT    21H                        

      RET                                               

CRLF    ENDP

DISPLAY    PROC    NEAR          ;显示于功能

         MOV  BX,0006H                        ;记录循环次数     

     DSL:  MOV  DL,[SI+BX-1]      ;将有效地址内的内容送往DL

           MOV  AH,02                           ;2号功能输出                    

           INT    21H         

           DEC  BX           ;BX自动减1

           JNZ    DSL                                                  

           RET                                                         

DISPLAY    ENDP

CODE  ENDS

    END  START

2  分支程序设计实验

接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

CODE  SEGMENT

MAIN  PROC  FAR

    ASSUME  CS:CODE

START:  MOV  AH,00H

    INT    16H

    CMP  AL,0DH

    JZ    OVER

    CALL  JUDGE

    MOV  DL,AL

    MOV  AH,02H

    INT    21H

    JMP    START

OVER:  MOV  AH,4CH

    INT    21H

MAIN  ENDP

JUDGE  PROC  NEAR

    CMP  AL,'a'

    JB    STOP

    CMP  AL,'z'

    JA    STOP

    SUB    AL,20H

STOP:  RET

JUDGE  ENDP

CODE  ENDS

  END  START

3  循环程序设计实验

统计一个有10人的班中,男、女生的人数各为多少。将男生人数存入变量MAN、女生人数存入变量WOMAN中。

DATA  SEGMENT

  MAN    DB     0,0

  WOMAN    DB     0,0

  STRING    DB     ' iuput people number! (man is 0, woman is 1 ) $'

   SM      DB     'man is :$'

  SW      DB     'woman is :$'

DATA  ENDS

CODE  SEGMENT

MAIN  PROC  FAR

    ASSUME  CS:CODE,DS:DATA

START:  MOV  AX,DATA

    MOV  DS,AX

    MOV  AH,09H        ;将STRING的内容输出

    MOV  DX,OFFSET STRING

    INT    21H

    CALL  CRLF

    MOV  CX,10        ;男女生总人数

AA:    MOV  AH,01H        ;从键盘输入,0为男,1为女

    INT    21H

    CMP  AL,30H        ;与'0'比较

    JNZ    ADDW        ;不为'0',女生人数加1

    INC    MAN        ;否则男生人数加1

BB:    LOOP  AA

    JMP    DISPLY        ;打印

ADDW:  INC    WOMAN

    JMP    BB

DISPLY:  CALL  CRLF

    MOV  AH,09H        ;字符串输出

    MOV  DX,OFFSET SM

    INT    21H

    MOV  AH,02H        ;男生人数统计结果输出

    MOV  DL,MAN

    ADD  DL,30H

    CALL  JUDGE

    CALL  CRLF

    MOV  AH,09H        ;字符串输出

    MOV  DX,OFFSET SW

    INT    21H

    MOV  AH,02H        ;女生人数统计结果输出

    MOV  DL,WOMAN

    ADD  DL,30H

    CALL  JUDGE

    MOV  AH,4CH        ;返回DOS

    INT    21H

MAIN  ENDP

JUDGE  PROC  NEAR        ;判断结果是否为39H

    CMP  DL,3AH

    JZ    SHI

CC:    INT    21H

    RET

SHI:    MOV  DL,31H

    INT    21H

    MOV  DL,30H

    JMP    CC

JUDGE  ENDP

  

CRLF  PROC  NEAR        ;回车换行子程序

    MOV  AH,02H        ;回车

    MOV  DL,0DH

    INT    21H

    MOV  DL,0AH        ;换行

    INT    21H

    RET

CRLF  ENDP

CODE  ENDS

  END  START

4  子程序设计实验

1.键盘输入字符,依次显示在行的最左端(即每接受一个字符,显示在屏幕上并回车换行。)

2.对频繁使用的回车换行编写为子程序,在主程序中调用完成分行显示。

CODE  SEGMENT

MAIN  PROC  FAR

    ASSUME  CS:CODE

START:  MOV  CX,10        ;设置循环次数

NEXT:  MOV  AH,01H        ;从键盘输入一个字符

    INT    21H

    CALL  CRLF        ;调用回车换行子程序

    LOOP  NEXT

    MOV  AH,4CH        ;返回DOS

    INT    21H

MAIN  ENDP

CRLF  PROC  NEAR        ;回车换行子程序

    MOV  AH,02H        ;回车

    MOV  DL,0DH

    INT    21H

    MOV  DL,0AH        ;换行

    INT    21H

    RET

CRLF  ENDP

CODE  ENDS

  END  START

5   码制转换程序实验

  将ASCⅡ码数据转换成二进制数据。要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。

DATA  SEGMENT

    STRING1  DB     'PLEASE INPUT A NUMBER(0~32767):$'

    STRING2   DB     'THE ASCII IS:$'

    STRING3  DB     'THE BINARY IS:$'

DATA  ENDS

CODE  SEGMENT

    ASSUME  CS:CODE,DS:DATA

MAIN  PROC  FAR

START:  MOV  AX,DATA

    MOV  DS,AX

    MOV  DX,OFFSET STRING1

    MOV  AH,09H

    INT    21H

    CALL  CRLF

INPUT:  MOV  AH,01H        ;输入数据

    INT    21H

    CMP  AL,0DH

    JZ    NEXT

    SUB    AL,30H

    JL    INPUT

    CMP  AL,39H

    JG    INPUT

    CBW

    XCHG  AX,BX        ;AX为输入值,BX保存结果,两个对调为MUL做准备

    MOV  DX,10D        ;将上一次结果乘10

    MUL  DX

    XCHG  AX,BX        ;AX为本次输入的值,BX为之前的结果

    ADD  BX,AX

    JMP    INPUT

NEXT:   CALL  CRLF

    MOV  CL,4D

    MOV  CH,4D

    MOV  DX,OFFSET STRING2

    MOV  AH,09H

    INT    21H

    CALL  CRLF

LOOP0:  ROL  BX,CL        ;循环左移,将最高为存到BL的低四位

    MOV  AL,BL

    AND  AL,0FH        ;

    ADD  AL,30H

    CMP  AL,3AH

    JL    OUTPUT

    ADD  AL,07H

OUTPUT:MOV  AH,02H

    MOV  DL,AL

    INT    21H

    DEC  CH

    JNZ    LOOP0

    CALL  CRLF

    MOV  DX,OFFSET STRING3

    MOV  AH,09H

    INT    21H

    CALL  CRLF

    MOV  CH,16D

    MOV  CL,1D

LOOP1:  ROL  BX,CL

    MOV  AL,BL

    AND  AL,01H

    ADD  AL,30H

    MOV  AH,02H

    MOV  DL,AL

    INT    21H

    DEC  CH

    JNZ    LOOP1

  

    MOV  AH,4CH

    INT    21H

MAIN  ENDP

OUTS  PROC  NEAR        ;字符串输出子程序

    MOV  AH,09H

    INT    21H

    RET

OUTS  ENDP

CRLF  PROC  NEAR        ;回车换行子程序

    MOV  AH,02H        ;回车

    INT    21H

    MOV  DL,0AH        ;换行

    INT    21H

    RET

CRLF  ENDP

CODE  ENDS

    END  START

6  两个数相乘的实验      

实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来。

 DATA  SEGMENT

      MBCS     DW     0

      MCS    DW   0

      RESULT    DW   0

      STRING1  DB     'THE BEICHENGSHU IS:$'

      STRING2  DB     'THE CHENGSHU IS:$'

      STRING3  DB     'THE RESULT IS:$'

      STRING    DB     'THE  ASCII IS:$'

DATA  ENDS

CODE  SEGMENT

MAIN  PROC  FAR

    ASSUME  CS:CODE,DS:DATA

START:  MOV  AX,DATA

    MOV  DS,AX

    MOV  DX,OFFSET STRING1

    CALL  OUTS

    CALL  INPUT        ;输入被乘数

    MOV  DX,OFFSET STRING

    CALL  OUTS

    CALL  CRLF

    CALL  ASCII        ;被乘数转化为ASCII码输出

    CALL  CRLF

    MOV  MBCS,BX        ;被乘数保存到MBCS中

    MOV  DX,OFFSET STRING2

    CALL  OUTS

    CALL  INPUT        ;输入乘数

    MOV  DX,OFFSET STRING

    CALL  OUTS

    CALL  CRLF

    CALL  ASCII        ;乘数转化为ASCII码输出

    CALL  CRLF

    MOV  MCS,BX        ;乘数保存到MCS中

    MOV  DX,OFFSET STRING3

    CALL  OUTS

    CALL  CRLF

    MOV  AX,MBCS        ;被乘数

    MUL  BX        ;乘数与被乘数相乘,结果高位DX,低位AX

    MOV  RESULT,AX      ;将AX中的内容保存到RESULT中

    MOV  BX,DX        ;将高位DX的值送给BX输出

    CALL  ASCII

    MOV  BX,RESULT      ;将低位AX的值送给BX输出

    CALL  ASCII

  

    MOV  AH,4CH

    INT  21H

MAIN  ENDP

INPUT  PROC  NEAR        ;输入十进制数,将其转化为ASCII码存到BX中

    CALL  CRLF

    MOV  BX,0

AA:    MOV  AH,01H

    INT  21H

    CMP  AL,0DH

    JZ    STOP

    SUB    AL,30H

    JL    AA

    CMP  AL,39H

    JG    AA

    CBW

    XCHG  AX,BX        ;AX为输入值,BX保存结果,两个对调为MUL做准备

    MOV  DX,10D        ;将上一次结果乘10

    MUL  DX

    XCHG  AX,BX        ;AX为本次输入的值,BX为之前的结果

    ADD  BX,AX

    JMP    AA

STOP:  CALL  CRLF

    RET

INPUT  ENDP

ASCII  PROC  NEAR

    MOV  CL,4D

    MOV  CH,4D

CC:    ROL  BX,CL        ;循环左移,将最高为存到BL的低四位

    MOV  AL,BL

    AND  AL,0FH        ;

    ADD  AL,30H

    CMP  AL,3AH

    JL    BB

    ADD  AL,07H

BB:    MOV  AH,02H

    MOV  DL,AL

    INT    21H

    DEC  CH

    JNZ    CC

    RET

ASCII  ENDP

OUTS  PROC  NEAR

    MOV  AH,09H

    INT    21H

    RET

OUTS  ENDP

CRLF  PROC  NEAR        ;回车换行子程序

    MOV  AH,02H        ;回车

    MOV  DL,0DH

    INT    21H

    MOV  DL,0AH        ;换行

    INT    21H

    RET

CRLF  ENDP

CODE  ENDS

    END  START

7   从键盘输入数据并显示的程序

编写程序将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

DATA  SEGMENT

  STRING1  DB   'Please enter a four-digit hexadecimal number:$'

DATA  ENDS

CODE  SEGMENT

    ASSUME  CS:CODE,DS:DATA

MAIN  PROC  FAR

START:  MOV  AX,DATA

    MOV  DS,AX

    MOV  DX,OFFSET STRING1

    MOV  AH,09H

    INT    21H

    CALL  CRLF

    MOV  CL,4D

INPUT:  MOV  AH,01H

    INT    21H

    CMP  AL,'0'

    JB    INPUT

    CMP  AL,'9'

    JA    ZIMU

    SUB    AL,30H

    JMP    NEXT

ZIMU:  CMP  AL,'A'

    JB    INPUT

    CMP  AL,'Z'

    JA    INPUT

    SUB    AL,37H

NEXT:  CBW

    XCHG  AX,BX

    MOV  DX,16D

    MUL  DX

    XCHG  AX,BX

    ADD  BX,AX

    LOOP  INPUT

    CALL  CRLF

    MOV  CL,1D

    MOV  CH,16D

TO:    ROL  BX,1

    MOV  DL,BL

    AND  DL,01H

    ADD  DL,30H

    MOV  AH,02H

    INT    21H

    DEC  CH

    JNZ    TO

    MOV  AH,4CH

    INT    21H

MAIN  ENDP

CRLF  PROC  NEAR        ;回车换行子程序

    MOV  AH,02H        ;回车

    MOV  DL,0DH

    INT    21H

    MOV  DL,0AH        ;换行

    INT    21H

    RET

CRLF  ENDP

CODE  ENDS

    END  START

8  字符和数据的显示程序

先显示信息“INPUT STRING THE END FLAG IS $”再接受字符如为0~9则计数器加1并显示数据。如为非数字,则直接显示但不计数。

DATA  SEGMENT

  STRING1  DB     'INPUT STRING THE END FLAG IS $'

  COUNT    DB     0

DATA  ENDS

CODE  SEGMENT

    ASSUME  CS:CODE,DS:DATA

MAIN  PROC  FAR

START:  MOV  AX,DATA

    MOV  DS,AX

    MOV  DX,OFFSET STRING1

    MOV  AH,09H

    INT    21H

    CALL  CRLF

INPUT:  MOV  AH,0

    INT    16H

    CMP  AL,0DH

    JZ    STOP

    CMP  AL,'0'

    JB    TO

    CMP  AL,'9'

    JA    TO

    INC    COUNT

TO:    MOV  AH,02H

    MOV  DL,AL

    INT    21H

    JMP    INPUT

STOP:  CALL  CRLF

    MOV  AH,02H

    MOV  DL,COUNT

    ADD  DL,30H

    INT    21H

    MOV  AH,4CH

    INT    21H

MAIN  ENDP

CRLF  PROC  NEAR        ;回车换行子程序

    MOV  AH,02H        ;回车

    MOV  DL,0DH

    INT    21H

    MOV  DL,0AH        ;换行

    INT    21H

    RET

CRLF  ENDP

CODE  ENDS

    END  START下载本文

显示全文
专题