汇编基础代码示例

字符串传递

data segment
    src db "hello!"
data ends
extra segment
    new db 6 dup("0")
extra ends
code segment
    assume cs:code,ds:data,es:extra
    start:
    mov ax,data
    mov ds,ax
    mov ax,extra
    mov es,ax
    lea si,src
    lea di,new
    mov cx,6
    cld
    rep movsb
code ends
end start

输出单个符号

表示输出单个ascii码的值

prog1 segment
assume cs:prog1
start:
	mov dl,'?';ASCII码
	mov ah,2
	int 21h
	mov ax,4c00h
	int 21h
prog1 ends
end start

求数字平方值

data segment
    table db 0,1,4,9,16,25,36,49,64,81
    buf db "Please input a number(0~9):",0DH,0AH,"$"
data ends
code segment
assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    mov dx,offset buf
    mov ah,9h
    int 21h
    mov ah,1
    int 21h
    and al,0fh 
    mov bx,offset table
    mov ah,0
    add bx,ax
    mov al,[bx]
    mov ax,4c00h
    int 21h          
code ends
end start

两数之和

data segment
    a1 db 56h,78h
    a2 db 4fh,9ah
    sum db 3 dup(0)
data ends
code segment
    assume cs:code,ds:data
begin:
    mov ax,data
    mov ds,ax
    mov bx,0
    clc                              
    mov al,a1[bx]
    adc al,a2[bx]
    mov sum[bx],al
    inc bx    
    mov al,a1[bx]
    adc al,a2[bx]
    mov sum[bx],al   
    jnc STOP
    inc bx
    mov al,1
    mov sum[bx],al
STOP:
    mov ax,4c00h
    int 21h
code ends
end begin
    

打印成绩单

al存放16进制的成绩

输出对应的成绩

    cmp al,60
    jb fail
    cmp al,85
    jae good
    mov al,"P"
    jmp print
fail:
    mov al,'F'
    jmp print
good:
    mov al,"G"
    jmp print
print:
    mov dl,al
    mov ah,2
    int 21h
    mov ax,4c00h
    int 21h

字符统计

统计数字 大写字母和其他字母的数量

data segment
buf db "PRINT","abc",35h,52h,30h,08h
count equ $-buf
num db 3 dup(0)
data ends
code segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    mov ch,count
    mov bx,0
    mov dx,0
loop1:
    mov ah,buf[bx]
    cmp ah,30h
    jl next
    cmp ah,39h
    jg abc
    inc dh
    jmp next
abc:
    cmp ah,41h
    jl next
    cmp ah,5ah
    jg next
    inc dl
next:
    inc bx
    dec ch
    jnz loop1
    mov num,dh
    mov num+1,dl
    mov ah,count
    sub ah,dh
    sub ah,dl
    mov num+2,ah
    mov ax,4c00h
    int 21h
code ends
end start

寻找最大值

data segment
save dw 1234h,3200h,4832h,5600h
count equ ($-save)/2
max dw ?
data ends
code segment
    assume code:cs,data:ds
start:
    mov ax,data
    mov ds,ax    
    mov bx,0         
    mov cx,count
    dec cx
    mov dx,save[0]
    mov max,dx
again:
    add bx,2
    mov dx,save[bx]
    cmp max,dx
    jg next
    mov max,dx
next:
    loop again
code ends
end start

BCD加法

data segment
A DB 44h,33h,22h,11h
B DB 88h,77h,66h,55h
ans 5 dup(0)
data ends
code segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,4 
again:
    mov al,A[bx]
    add al,B[bx]
    daa   
    mov ans[bx],al  
    jnc NEXT
    add A[bx+1],1     
NEXT:      
    inc bx
    loop again
code ends
end start

冒泡排序

data segment
list dw 12,7,19,8,24
count equ ($-list)/2
data ends
code segment
    assume cs:code,ds:data
start:
   mov ax,data
   mov ds,ax
   mov cx,count-1
loop1:
    mov dx,cx
    mov bx,0  
loop2:
    mov ax,list[bx]
    cmp ax,list[bx+2]
    JGE NO_CHANGE 
    xchg ax,list[bx+2]
    mov list[bx],ax
NO_CHANGE:         
    add bx,2
    loop loop2
    mov cx,dx
    loop loop1
    mov ax,4c00h
    int 21h
code ends
end start

输出数字

AL位62H对应十进制数字98

Bin_ascii proc near
    mov ah,0  
    mov bl,10
    div bl     
    xchg ah,al
    add ax,3030h
    mov cx,ax
    mov dl,ch
    mov ah,2
    int 21h
    mov dl,cl
    int 21h
    ret
Bin_ascii endp    

存储数字

输出十进制数字,存入bx中

DEC_BIN proc near
    mov bx,0
get_char:
    mov ah,1
    int 21h
    cmp al,0dh
    je exit
    sub al,30h
    jl exit
    cmp al,9
    jg exit
    cbw
    xchg ax,bx
    mov cx,10
    mul cx
    xchg ax,bx
    add bx,ax
    jmp get_char     
exit:
    ret         
DEC_BIN endp           

输出16进制

将bx中的数据以十六进制输出

BIN_HEX proc near
    mov cx,4      
begin:      
    mov dl,bh
    shr dl,4
    add dl,30h
    cmp dl,'9'
    jl Display   
    sub dl,'9'+1
    add dl,"A"  
Display:
    mov ah,2
    int 21h   
    shl bx,4
loop begin
BIN_HEX endp    

十六进制转BCD

这里需要注意的是,字节除数的时候,DX是做高八位的

bin_bcd proc near 
    mov ax,04D2h
    cmp ax,9999
    jbe tran
    jmp exit
tran:
    mov dx,0
    mov cx,1000
    div cx
    xchg ax,dx  
    shl bx,4
    add bx,dx 
    mov dx,0   
    mov cx,100
    div cx
    xchg ax,dx  
    shl bx,4
    add bx,dx 
    mov dx,0   
    mov dx,0
    mov cx,10
    div cx
    xchg ax,dx  
    shl bx,4
    add bx,dx 
    mov dx,0   
    mov cx,1
    div cx
    xchg ax,dx  
    shl bx,4
    add bx,dx 
    mov dx,0
exit:
    ret
bin_bcd endp          

求BCD和

使用过程调用的方法

data segment
    num1 db 44h,33h,22h,11h
    num2 db 88h,77h,66h,55h
    sum db 5 dup(0)
data ends    
stack segment stack
    dw 50 dup()  
    top label word
stack ends

code segment
main proc far
    assume cs:code,ds:data,ss:stack
start:    
    mov ax,stack 
    mov ss,ax    
    mov sp, offset top
    push ds
    push 0
    mov ax,data
    mov ds,ax    
    mov es,ax               
    lea si,num1
    lea bx,num2
    lea di,sum
    clc  
    cld
    mov ah,0
    mov cx,4
loop1:
    call add_b
    loop loop1
    adc ah,0    
    mov al,ah
    stosb
    ret
main endp

add_b proc near
    lodsb     
    adc al,[bx]
    daa
    stosb
    inc bx
    ret
add_b endp
code ends
end main

斐波那契

data segment    
    Fibonacci db 1,1,5 dup()
data ends
code segment  
    assume cs:code,ds:data
start:       
    mov ax,data
    mov ds,ax
    mov cx,5   
    mov dh,0
    mov dl,1
Loop1:            
    mov bx,0
    mov bl,dh
    mov ah,Fibonacci[bx]      
    mov bl,dl
    mov al,Fibonacci[bx]
    add ah,al    
    inc dh
    inc dl       
    inc bx
    mov Fibonacci[bx],ah
    loop Loop1      
code ends 
end start           
  • 1
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Round moon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值