都说不学汇编就很难有大成就,虽说是有些底层但精通汇编还是少之甚少,希望自己能学会它吧,也能更好的学高级语言,为java打好更深理解的基础。我是来自青鸟的一位学员,下面是我总结出的一些学习汇编的小准备,希望能够帮助到大家,更多详情,请参阅:[url=http://www.cpbdqn.com]网络工程专业[/url] 
《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