`

汇编语言程序

asm 
阅读更多
《1》、实现绕圈的笑脸:
assume cs:code 
code segment 
       dec dh 
       dec dl 
       inc dh 
       inc dl        ;预存指令 
start: mov ax,cs 
       mov ds,ax       
       mov si,0 
       lea di,s1     ;使ds:si指向预存指令,ds:di指向目的地址 
       mov dx,0h     ;光标起始坐标0,0 
     s:mov ah,2 
       mov bh,0 
       int 10h       ;调用int 10h第2号中断,置光标 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
       mov ah,0ah     ;int 10h第0a号中断 
       mov al,2       ;显示笑脸 
       mov bh,0        ;第0页 
       mov cx,1       ;重复次数1 
       int 10h 
       call delay     ;延迟显示 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
       mov ah,0ah      ;用int 10h  0a号中断清除笑脸 
       mov al,0 
       mov bh,0 
       int 10h 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
       cmp dh,24       ;行号是否为24 
       jb L             ;小于则转 L 
       mov ax,[si]     ;等于则改s1处为自减 
       mov [di],ax      
    L2:cmp dl,79       ;列号是否为79 
       jb L1           ;小于则转 L1 
       mov ax,[si+2]    ;等于,改si+2处为自减 
       mov [di+2],ax 
       jmp s1             
     L:cmp dh,0         ;行号是否为0 
       ja L2             ;大于0转L2 
       mov ax,[si+4]     ;为0 ,改s1处为自加 
       mov [di],ax 
       jmp L2 
    L1:cmp dl,0         ;列号是否为0 
       ja s1            ;大于转 s1 
       mov ax,[si+6]    ;等于改 s1+2处 自加 
       mov [di+2],ax 
    s1:inc dh 
       inc dl  
       jmp s   
       mov ax,4c00h 
       int 21h 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
 delay:push ax 
       push dx 
       mov dx,2000h 
       mov ax,0 
   s3: sub ax,1 
       sbb dx,0 
       cmp ax,0 
       jne s3 
       cmp dx,0 
       jne s3 
       pop dx 
       pop ax 
       ret  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
 code ends 
 end start 
改进一下的【加中断可控制了】:
assume cs:code  
code segment  
       dec dh  
       dec dl  
       inc dh  
       inc dl        ;预存指令  
start: mov ax,cs  
       mov ds,ax        
       mov si,0  
       lea di,s1     ;使ds:si指向预存指令,ds:di指向目的地址  
       mov dx,0h     ;光标起始坐标0,0  
     s:mov ah,2  
       mov bh,0  
       int 10h       ;调用int 10h第2号中断,置光标  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         
       mov ah,0ah     ;int 10h第0a号中断  
       mov al,2       ;显示笑脸  
       mov bh,0        ;第0页  
       mov cx,1       ;重复次数1  
       int 10h  
       call delay     ;延迟显示  
       in al,60H  
       cmp al,10H  
       jz over  

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  
       mov ah,0ah      ;用int 10h  0a号中断清除笑脸  
       mov al,0  
       mov bh,0  
       int 10h  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  
      
       cmp dh,24       ;行号是否为24  
       jb L             ;小于则转 L  
       mov ax,[si]     ;等于则改s1处为自减  
       mov [di],ax       
    L2:cmp dl,79       ;列号是否为79  
       jb L1           ;小于则转 L1  
       mov ax,[si+2]    ;等于,改si+2处为自减  
       mov [di+2],ax  
       jmp s1              
     L:cmp dh,0         ;行号是否为0  
       ja L2             ;大于0转L2  
       mov ax,[si+4]     ;为0 ,改s1处为自加  
       mov [di],ax  
       jmp L2  
    L1:cmp dl,0         ;列号是否为0  
       ja s1            ;大于转 s1  
       mov ax,[si+6]    ;等于改 s1+2处 自加  
       mov [di+2],ax  
    s1:inc dh  
       inc dl   
       jmp s    
 over:  mov ax,4c00h  
       int 21h  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         
 delay:push ax  
       push dx  
       mov dx,500h  
       mov ax,0  
   s3: sub ax,1  
       sbb dx,0  
       cmp ax,0  
       jne s3  
       cmp dx,0  
       jne s3  
       pop dx  
       pop ax  
       ret   
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         
 code ends  
 end start
《2》、像素颜色
;子程序display入口参数 
;cx列号 
;dx行号 
;al像素颜色 
;子程序delay延时 
stack segment stack 
     db  100h dup(?) 
stack ends 
code segment 
 assume cs:code,ds:code,ss:stack 
 start: 
       xor ax,ax         ;设置显示模式(640*480 16色图形) 
       mov ah,0 
       mov al,12h 
       int 10h 
       mov ah,0bh            ;置调色板背景色 
       mov bh,0 
       mov bl,0 
       int 10h 
       mov cx,0 
       mov dx,0 
       mov al,0 
    s2:call display 
       call delay 
       inc al 
       cmp al,10h 
       je exit 
       add cx,10 
       jmp s2 
 exit: mov ah,01 
       int 21h                              ;esc退出观看效果                               
       cmp al,1bh 
       jne exit 
       mov ax,0003h 
       int 10h 
       mov ax,4c00h 
       int 21h 
 display:push ax 
         push bx 
         push si 
         mov bx,cx 
         mov si,cx 
         add si,10      
    s: mov ah,0ch 
       int 10h 
       inc cx 
       cmp cx,si 
       jne s 
       mov cx,bx 
       inc dx 
       cmp dx,10 
       jne s 
       mov dx,0 
       pop si 
       pop bx 
       pop ax 
       ret 
 delay:push ax 
       push dx 
       mov dx,2000h 
       mov ax,0 
     s1:sub ax,1 
        sbb dx,0 
        cmp ax,0 
        jne s1 
        cmp dx,0 
        jne s1 
        pop dx 
        pop ax 
       ret 
 code ends 
 end start 
《3》进制转换:

(1)16转10进制:
TITLE CONVERT HEXADECIMAL TO BCD
DATA SEGMENT
PROMPT DB 'Hello  Boss!  INPUT   sixten bits number ,please  :$'
HEXBUF DB 3,0,3  DUP(0)
DISP   DB  0AH,0DH
BCDBUF DB  6  DUP(0),'$'
DATA   ENDS
STACK1  SEGMENT PARA STACK
         DW 20H  DUP(0)
STACK1   ENDS
COSEG    SEGMENT
         ASSUME  CS:COSEG,DS:DATA,SS:STACK1
HEXBCD: MOV  AX,DATA
        MOV  DS,AX
        LEA  DX,PROMPT
        MOV  AH,09H
        INT  21H
        LEA  DX,HEXBUF
         MOV  AH,0AH
        INT  21H
        LEA   SI,HEXBUF+2
        MOV   BX,0
        MOV   CH,HEXBUF+1
HEX1:   MOV   AL,[SI]
        CMP   AL,'9'
        JBE   NUMB
        SUB   AL,07H
NUMB:   AND   AL,0FH
        MOV   CL,04
        SAL   BX,CL
        OR    BL,AL
        INC   SI
        DEC   CH
        JNE   HEX1
        MOV   WORD PTR   BCDBUF+0,0
        MOV   WORD PTR   BCDBUF+2,0
        MOV   WORD PTR   BCDBUF+4,0
       
        TEST   BX,8000H
         JNS   PLUS
         MOV   BCDBUF,'-'
NEG      BX  
PLUS:    MOV CH,0FH
LOP0:    CLC
         SHL   BX,1
         CALL  ADDIT
         CALL  MULTI
          DEC   CH
        JNE   LOP0
        SHL   BX,1
        CALL  ADDIT


        LEA  DI,BCDBUF+1
        MOV  CX,3
LOP1:   OR  BYTE PTR  [DI],30H
         INC  DI
         LOOP  LOP1

         LEA  DX,DISP
          MOV  AH,09H
          INT  21H
        
          MOV  AH,4CH
          INT   21H

ADDIT     PROC
          LEA  DI,BCDBUF+3
           MOV CL,3
ADD1:     MOV AL,[DI]

           ADC AL,0
           AAA
           MOV   [DI],AL
           DEC   DI
           DEC   CL
           JNE   ADD1
           RET
ADDIT      ENDP
MULTI      PROC
           LEA   DI,BCDBUF+3
           MOV  CL,3
           CLC  
MUL1:      MOV   AL,[DI]
           ADC  AL,AL
           AAA
           MOV   [DI],AL
           DEC    DI
           DEC    CL
           JNE  MUL1
            RET
MULTI       ENDP
COSEG       ENDS
            END HEXBCD   

(2)十转十六进制:

TITLE ADDITION 
DATA SEGMENT 
A1   DB "Input a number please: ","$" 
A2   DB 0DH,0AH,"The result is: ","$" 
DATA ENDS 
STACK1 SEGMENT PARA STACK 
       DW 20H DUP(?) 
STACK1 ENDS 
COSEG SEGMENT 
      ASSUME CS:COSEG,DS:DATA,SS:STACK1 
START: MOV AX,DATA 
       MOV DS,AX

       MOV DX,OFFSET A1 
       MOV AH,9 
       INT 21H

       MOV AH,01H 
       INT 21H        
       
       AND AL,0FH
       SUB AH,AH
       ADD BX,AX

       MOV AH,01H 
       INT 21H 
       
       CMP AL,0DH
       JE ERR1

       MOV DX,BX
       MOV CL,3
       SAL BX,CL
       ADD BX,DX
       ADD BX,DX

       AND AL,0FH
       SUB AH,AH
       ADD BX,AX
       
ERR1:  MOV DX,OFFSET A2 
       MOV AH,9 
       INT 21H

        SUB AX,AX
        MOV CH,4
ERR2:   MOV CL,4
        ROL BX,CL
        MOV AL,BL
        AND AL,0FH
        ADD AL,30H
        CMP AL,3AH
        JB ERR3
        ADD AL,07H
ERR3:   MOV DL,AL
        MOV AH,2
        INT 21H
        DEC CH
        JNZ ERR2   
            
        MOV AH,4CH 
        INT 21H 
COSEG   ENDS 
        END START

 

分享到:
评论

相关推荐

    汇编语言程序设计答案 汇编语言程序设计答案

    《汇编语言程序设计答案解析》 汇编语言,作为计算机科学的基础,是与机器硬件直接交互的语言。它以其高效、直接控制硬件的特性,在系统编程、设备驱动、嵌入式系统等领域扮演着重要角色。《汇编语言程序设计》这门...

    IBM PC汇编语言程序设计

    本书为清华大学计算机汇编语言程序设计课教材,主要阐述IBM PC及其兼容机汇编语言程序程序设计的方法和技术。全书共13章:第一、二章介绍基础知识;第三、四章说明IBM PC机的指令系统及包括伪操作在内的汇编语言程序...

    80x86汇编语言程序设计课后答案

    "80x86汇编语言程序设计课后答案" 本资源是沈美明编著的《80x86汇编语言程序设计》课后答案,涵盖了汇编语言程序设计的基础知识和实践应用。 第一章 ### 1.1 将十进制数转换为二进制数和十六进制数 在计算机科学...

    Inter汇编语言程序设计(第五版)

    从给定的信息来看,主要关注的是“Inter汇编语言程序设计(第五版)”这一书籍。这本教材是学习Intel架构下汇编语言程序设计的重要资料,尤其对于那些希望深入了解低级编程、计算机体系结构以及操作系统原理的学习者...

    80x86汇编语言程序设计教程

    《80x86汇编语言程序设计教程》是一本专业的计算机编程书籍,由杨季文等编著,由钱培德审校,由清华大学出版社出版。此书详细讲述了80x86系列汇编语言的程序设计方法,适合不同层次的读者学习和参考。以下从几个方面...

    INTEL汇编语言程序设计

    《INTEL汇编语言程序设计》是一本深入探讨汇编语言编程的经典著作,作者Kip Irvine是该领域的权威专家。本书覆盖了从基础概念到高级技术的全面内容,旨在帮助读者理解和掌握Intel架构下的汇编语言编程技巧。汇编语言...

    80x86汇编语言程序设计教程.rar

    80x86汇编语言程序设计教程.rar80x86汇编语言程序设计教程.rar80x86汇编语言程序设计教程.rar80x86汇编语言程序设计教程.rar80x86汇编语言程序设计教程.rar80x86汇编语言程序设计教程.rar80x86汇编语言程序设计教程....

    Windows.环境下32位汇编语言程序设计

    在Windows环境下进行32位汇编语言程序设计是一项技术性极强的工作,它涉及到操作系统、处理器架构、编程语言以及软件开发工具等多个方面的知识。这里,我们将深入探讨这一主题,涵盖核心概念、关键技术和实践应用。 ...

    沈美明汇编语言程序设计电子版

    汇编语言程序设计电子版是关于汇编语言的教学和应用的专业书籍。汇编语言是一种低级编程语言,它与计算机的机器语言十分接近,但用符号代替了二进制的0和1,使得程序更易于理解和编写。汇编语言程序设计涉及的主要...

    刘恩海汇编语言程序设计教程课件234章

    《刘恩海汇编语言程序设计教程》是针对计算机科学领域的一门重要课程,主要讲解如何用汇编语言编写程序。汇编语言是一种低级编程语言,它与计算机硬件的指令集紧密相关,每一个汇编指令都对应着一个或多个机器码。本...

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

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

    ibm-pc汇编语言程序设计教程参考答案

    ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考...

    IBM-PC汇编语言程序设计(第2版)

    本书主要阐述80X86汇编语言程序设计方法和技术。全书共分四部分:第1章和第2章为基础知识部分;第3章和第4章为编程工具部分,主要内容为80X86的指令系统与寻址方式,以及包括伪操作在内的汇编语言程序格式;第5章-第...

    Windows环境下32位汇编语言程序设计电子版

    在Windows环境下进行32位汇编语言程序设计是一项技术性极强的工作,它涉及到操作系统、处理器架构、编程语言以及软件开发工具等多个方面的知识。本文将深入探讨这一主题,旨在为初学者提供一个全面的了解,并为有...

    新版汇编语言程序设计 第二版 钱晓捷

    钱晓捷教授编著的《新版汇编语言程序设计 第二版》是该领域的一本重要参考书籍,它不仅覆盖了8086指令系统、汇编语言程序格式、基本汇编语言程序设计等基础知识,还扩展到32位指令及其编程,并且介绍了与C/C++语言的...

    汇编语言程序的上机过程及调试

    汇编语言程序的上机过程及调试 汇编语言程序的上机过程是指将汇编语言源程序转换为机器语言程序的过程。这个过程主要包括四个步骤:编辑汇编语言源程序、汇编源程序、连接程序和运行调试。 一、编辑汇编语言源程序...

    32位汇编语言程序设计 钱晓捷

    32位汇编语言程序设计知识点总结 本文档涵盖了32位汇编语言的重要知识点,包括汇编语言的基本概念、数据类型、寻址方式、寄存器、指令集、程序设计等方面的知识点。 一、汇编语言基础 * 汇编语言是一种低级语言,...

    汇编语言程序设计试题及答案

    汇编语言程序设计是计算机科学领域的一个重要分支,它是一种低级编程语言,与机器语言密切相关,但比机器语言更易读、易写。在学习汇编语言时,理解和掌握指令集、寄存器操作、数据类型、寻址模式、流程控制结构以及...

Global site tag (gtag.js) - Google Analytics