写这个帖子目的只是让没有入门的同学入个门,其实我的汇编技术很差的,很多我也不清楚,我把我知道得写写吧,来这么久了几乎没怎么发过原创的帖子,惭愧!
开始正题
一,汇编常用的基本的语句
我们不从语句讲起,先看个例子。
code segment
assume cs:code
in db ? 定义变量in
begin:
mov ah 01
int 21h 调用dos中断,此中断的作用:从键盘读入一个数ascii,存入al中
sub al,30 将ascii码-30,存入bl
mov bl,al
mov ah,01 读入第2个字符
int 21h
sub al,30
add al, bl al的内容+bl的内容
mov in, al 把al的内容放到变量in 中
mov ah,4ch
int 21h 这两条语句是调用dos中断,作用: 停机,一般用于程序末尾
code ends
end begin
讲解:
mov : 数据搬移指令,
格式: mov 目标操作数 原操作数。
把原操作数的内容放到立即操作数中。
这个mov很有学问的,下一篇专门讲解这个mov指令,高手见了不要见笑。
sub : 减法指令
格式: sub d,s
d-s并把结果放在d里面,也就是d=d-s
add: 加法指令
格式: add d,s
跟sub差不多,d=d+s
关于汇编语言的格式,(dos下)
code segment
assume ......
定义变量.......
begin:
.......
code ends
end begin
segment和ends必须成对出现,segment 和ends间为段体,格式:
段名 segment [定位类型][组合类型][‘类别’]
。。。。。。。。。。
段名 ends
assume 伪指令的作用是告诉汇编程序,有关段寄存器将被设定为内存中哪一个段的地址寄存器,而其中段地址值的真正装入还必须通过给段寄存器赋值的执行性指令来完成。
说说定义变量
举几个例子:
num dw 12 定义一个名为num的dw型的变量,值为12
abc db 10 定义一个名为abc的db型的变量,值为10
worker dd 1123 定义一个名为worker的dd型的变量,值为1123
db:字节变量
dw:字变量,(一个字等于2字节)
dd:双字变量
dq:4字
dt:10字
好累了,明天还要上机械设计课和软件基础,能不能去就看天意了,(练健身全身痛)
最后说说中断调用
通常汇编中的输入输出有两条指令联合描绘:
mov ah,01
int 21h
其中第二条叫做系统调用,ah=1说明调用的是1号功能,此中断作用是从键盘读入一个数ascii,存入al中,(注意我没写错,是存入al中)
让我们开始把。上次用一个例子给大家一个模糊的概念,可能你并不是完全明白那个例子的来龙去脉,这没有关系,有个认识就可以了,
我觉得学习汇编最大的障碍是 书上的教法不适合初学者,即使是有基础的人学起来也有点迷糊,既然是编成当然要从实际入手,这次开始我们来一个例子热身,和上次那个差不多
=========================================================================
;目的:将键盘输入的多字符(注意是多字符)保存到由若干个存储单元组成的变量inbuf中,以回车结束。
code segment
assume cs:code 由于没有声明变量,不需要设置数据段
start: mov bx,00h
again: mov ah,01h 调用中断,作用不用说了吧,键入一个字符将ascii到al(注意是一个字符)
int 21h
cmp al,0dh 如果al中的值是
开始正题
一,汇编常用的基本的语句
我们不从语句讲起,先看个例子。
code segment
assume cs:code
in db ? 定义变量in
begin:
mov ah 01
int 21h 调用dos中断,此中断的作用:从键盘读入一个数ascii,存入al中
sub al,30 将ascii码-30,存入bl
mov bl,al
mov ah,01 读入第2个字符
int 21h
sub al,30
add al, bl al的内容+bl的内容
mov in, al 把al的内容放到变量in 中
mov ah,4ch
int 21h 这两条语句是调用dos中断,作用: 停机,一般用于程序末尾
code ends
end begin
讲解:
mov : 数据搬移指令,
格式: mov 目标操作数 原操作数。
把原操作数的内容放到立即操作数中。
这个mov很有学问的,下一篇专门讲解这个mov指令,高手见了不要见笑。
sub : 减法指令
格式: sub d,s
d-s并把结果放在d里面,也就是d=d-s
add: 加法指令
格式: add d,s
跟sub差不多,d=d+s
关于汇编语言的格式,(dos下)
code segment
assume ......
定义变量.......
begin:
.......
code ends
end begin
segment和ends必须成对出现,segment 和ends间为段体,格式:
段名 segment [定位类型][组合类型][‘类别’]
。。。。。。。。。。
段名 ends
assume 伪指令的作用是告诉汇编程序,有关段寄存器将被设定为内存中哪一个段的地址寄存器,而其中段地址值的真正装入还必须通过给段寄存器赋值的执行性指令来完成。
说说定义变量
举几个例子:
num dw 12 定义一个名为num的dw型的变量,值为12
abc db 10 定义一个名为abc的db型的变量,值为10
worker dd 1123 定义一个名为worker的dd型的变量,值为1123
db:字节变量
dw:字变量,(一个字等于2字节)
dd:双字变量
dq:4字
dt:10字
好累了,明天还要上机械设计课和软件基础,能不能去就看天意了,(练健身全身痛)
最后说说中断调用
通常汇编中的输入输出有两条指令联合描绘:
mov ah,01
int 21h
其中第二条叫做系统调用,ah=1说明调用的是1号功能,此中断作用是从键盘读入一个数ascii,存入al中,(注意我没写错,是存入al中)
让我们开始把。上次用一个例子给大家一个模糊的概念,可能你并不是完全明白那个例子的来龙去脉,这没有关系,有个认识就可以了,
我觉得学习汇编最大的障碍是 书上的教法不适合初学者,即使是有基础的人学起来也有点迷糊,既然是编成当然要从实际入手,这次开始我们来一个例子热身,和上次那个差不多
=========================================================================
;目的:将键盘输入的多字符(注意是多字符)保存到由若干个存储单元组成的变量inbuf中,以回车结束。
code segment
assume cs:code 由于没有声明变量,不需要设置数据段
start: mov bx,00h
again: mov ah,01h 调用中断,作用不用说了吧,键入一个字符将ascii到al(注意是一个字符)
int 21h
cmp al,0dh 如果al中的值是