1.16位汇编基础框架
汇编代码->汇编-obj文件->Link->exe 16位的exe
32位的操作系统一般是兼容16位的
64位的不行(不同位数的操作系统的汇编语言的语法都是不同的)
在没有别的特殊指令时,代码的运行从代码段的0开始。
在16位汇编语言中,如果想要让程序安全退出,就要使用一个中断进行退出。
cs是代码段寄存器
mov是传送指令
ax是16位通用寄存器
4c00H:加上H是16进制,不加H是十进制,如果十六进制的这个数据是以字母开头的,那么就要在开头加上0,因为汇编语言是不支持以字母开头的。例如:A4c00H -> 0A4c00H
mov ax,4c00H
int 21H
以上两行代码进行一个“return”的功能操作
assume cs:code ;指定cs代码段名叫code
code segment ;代码段的起始位置
rkvir proc ;函数起始
ret ;返回指令
rkvir endp ;函数结束
rkmain proc
mov ax,4c00H ;将4c00H放到ax这个通用寄存器中进行保存
int 21H ;执行一个21号中断
rkmain endp
start: call rkvir ;从当前位置跳转到指定指令
code ends ;代码段的结束位置
end start ;所有指令结束加上end
数据传送指令 MOV
格式: MOV OPRD1,OPRD2
功能: 本指令将一个源操作数送到目的操作数中,即将OPRD1传入OPRD2.
2.加减循环
加法:
add:两数相加
inc: 自增
减法:
sub:两数相减
dec:自减
循环:
loop循环
①【add】两数相加
assume cs:code ;指定cs代码段名叫code
code segment ;代码段的起始位置
rkmain proc ;函数起始
mov ax,1
mov bx,2
add bx,ax
mov bx,ax
mov ax,4c00H
int 21H
rkmain endp ;函数结束
start: call rkmain ;从当前位置跳转到指定指令
code ends ;代码段的结束位置
end start ;所有指令结束加上end
②【inc】自增
assume cs:code ;指定cs代码段名叫code
code segment ;代码段的起始位置
rkmain proc ;函数起始
mov ax,1
inc ax
mov bx,ax
mov ax,4c00H
int 21H
rkmain endp ;函数结束
start: call rkmain ;从当前位置跳转到指定指令
code ends ;代码段的结束位置
end start ;所有指令结束加上end
③【sub】两数相减、【dec】自减
assume cs:code ;指定cs代码段名叫code
code segment ;代码段的起始位置
rkmain proc ;函数起始
mov ax,2
mov bx,1
sub ax,bx
dec ax
mov bx,ax
mov ax,4c00H
int 21H
rkmain endp ;函数结束
start: call rkmain ;从当前位置跳转到指定指令
code ends ;代码段的结束位置
end start ;所有指令结束加上end
④循环
使用 cx计数器对循环次数进行记录
assume cs:code ;指定cs代码段名叫code
code segment ;代码段的起始位置
rkmain proc ;函数起始
mov ax,0
mov cx,10 ;想循环几次就给cx一个值
rk:
inc ax
loop rk
mov bx,ax
mov ax,4c00H
int 21H
rkmain endp ;函数结束
start: call rkmain ;从当前位置跳转到指定指令
code ends ;代码段的结束位置
end start ;所有指令结束加上end