一、汇编代码如何执行
- 编译 masm a.asm
- 链接 link a.obj
- 执行 a.exe
二、编码注意事项
- 写函数时,用到的寄存器,最好不要破坏原有的值,所以一般把用到的寄存器先push,退出函数前再按相反的顺序pop出来。
fun1 proc near
push ax
push bx
;使用ax,bx做一些操作
pop bx
pop ax
ret
fun1 endp
三、汇编练习代码
- 设计程序。实现Y=2X+3,X是一位十进制数。要求X从键盘输入,在下一行上显示’Y=2X+3=’ 以及十进制计算结果。
.model small
.data
mess1 db 'input x:','$' ;输出字符串要以$结尾
mess2 db 0ah,0dh,'y=2x+3=$' ;0ah,0dh就是回车换行
.stack 100h
.code
start:
mov ax,@data
mov ds,ax
mov dx,offset mess1
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
shl al,1
add al,3
mov ah,0
mov bl,10
div bl
add ax,3030h
mov bx,ax
mov dx,offset mess2
mov ah,9
int 21h
mov ah,2
mov dl,bl
int 21h
mov dl,bh
int 21h
mov ah,4ch
int 21h
end start
- 计算 Y=5X-18,如果结果为负,求绝对值。并显示十进制结果。
.model small
.data
mess1 db 'input string:','$'
buffer db 64,?,64 dup(?) ;字符串缓冲区
crlf db 0ah,0dh,'output:$' ;回车换行,字符串要以$结尾
.code
start:
mov ax,@data
mov ds,ax
lea dx,mess1
mov ah,09h
int 21h
;输入字符串
mov dx,offset buffer
mov ah,0ah
int 21h
mov si,1
mov al,buffer[si]
add al,2
mov ah,0
mov si,ax
mov buffer[si],24h ;在字符串最后面加上$
mov ah,9
mov dx,offset crlf
int 21h
mov ah,9
mov dx,offset buffer
int 21h
mov ah,4ch
int 21h
end start
- 从键盘输入一串字符,如果是数字存入NUMB单元,如果是字母,将大写字母存入CAPI单元,小写字母存入LETT单元,分别统计个数,输入回车时退出。
.model small
.data
numb db 10 dup(?)
capi db 10 dup(?)
lett db 10 dup(?)
numbCount dw ?
capiCount dw ?
lettCount dw ?
m