内容简介:大学时候学习的单片机原理和微机原理有用到汇编语言,但是当时觉得太过晦涩难懂,就没有学太懂。最近开始学习汇编语言,决定把汇编好好学习一下,网友介绍了王爽老师的win10对汇编支持并不友好,索性在虚拟机装了一个XP。折腾汇编环境半天才搞定。首先是带x的寄存器(常用16位寄存器)
大学时候学习的单片机原理和微机原理有用到汇编语言,但是当时觉得太过晦涩难懂,就没有学太懂。最近开始学习汇编语言,决定把汇编好好学习一下,网友介绍了王爽老师的 《汇编语言》 第三版 (提取码nc3c),但为了学习还是买了一本实体书,这样更便于学习和翻阅。
win10对汇编支持并不友好,索性在虚拟机装了一个XP。折腾汇编环境半天才搞定。
首先是带x的寄存器(常用16位寄存器)
AX,BX,CX,DX
另有CS:IP
CS是段寄存器,段寄存器是羞涩的姑娘,不可以直接赋值,只能间接赋值。
CS:IP是当前执行的指令在内存中的地址。IP中存放为偏移地址。
计算方法:指向地址 =(CS)x10H +(IP)
DS是数据 段寄存器
SS为堆栈 段寄存器 SP为堆栈偏移地址,计算方法和CS:IP类似。
每个16位寄存器都是由两个八位寄存器组成,比如AX是有AH和AL组成,以此类推….
最简单且常用的指令有:
指令 | 作用 | 举例 | 含义 |
---|---|---|---|
MOV | 赋值 | MOV AX,BX | (AX)=(BX) |
ADD | 加法 | ADD AX,CX | (AX)=(AX)+(CX) |
SUB | 减法 | SUB AH,BH | (AH)=(AH)-(BH) |
第一个程序
assume cs:wahaha ;wahaha程序入口地址 wahaha segment ;代码段开始 mov ax,0123h ; 0123h赋值给AX mov bx,0456h ; 0456赋值给BX add ax,bx ; BX的值加到AX中去 add ax,ax ; AX的两倍放到AX中去 mov ax,4c00h ;程序结束返回 int 21h wahaha ends end
依次执行 masm 1.asm
和 link 1.obj
如下图
进如debug进行调试
使用u命令查看汇编指令,使用r命令查看当前当前CPU寄存器的状态,使用t命令执行一条指令,如下图
遇到 int 21
使用p命令进行结束
最后使用q命令退出debug模式
第二个程序:
计算2x2的值,并保存在ax中
assume cs:code code segment mov ax,2 ;把2放到AX中 add ax,ax ;AX自加一次,也可以用 inc ax mov ax,4c00h ; 程序结束,返回 int 21h code ends end
deug查看寄存器中的值,
我们有发现ds:0B26,但是程序存放在0B36起始的地址中,那么这265个(0B36H x 10H - B26H x 10H = 100H)个字节的空间跑哪里去了呢?
其实这256字节的空间叫做PSP,是debug程序需要占用的一段内存。
第三个程序:计算5x4的值
assume cs:wusi wusi segment mov ax,5h ;赋初值 mov bx,0h ;累加到BX,bx置0 add bx,ax ;第一次累加 add bx,ax add bx,ax add bx,ax ;第四次累加 mov ax,4c00H ;程序返回 int 21h wusi ends ;这一段程序结束 end ;所有程序结束
计算机是非常笨的,他不会做乘法,乘法是通过一次次累加得出的。
计算5x4需要5 累加4次,如果5x100呢?
换个思路100x5,可以用100累加5次,那如果88568x58755呢?难道累加五万多次?
很好,和 C语言 一样,汇编也有自己的循环程序,只需要写一段代码,让他循环五万多次就可以了
下面第四个程序: 计算285x168
assume cs:laila laila segment mov bx,0 ;累加器置零 mov cx,168 ;循环次数168 s: add bx,286 ;循环体 loop s ;若cx不等于0 跳转执行s mov ax,4c00h ;程序结束,返回 int 21h laila ends end
使用lopp循环168次,循环次数默认存放在CX中
结果是BX中存放的BBB0H
十进制就是48048,可以用计算器验证一下,算的没错。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS汇编入门教程(一)ARM64汇编基础
- iOS 汇编入门教程(一):ARM64 汇编基础
- iOS汇编入门教程(三)汇编中的 Section 与数据存取
- iOS汇编入门教程(二)在Xcode工程中嵌入汇编代码
- 汇编语言8086笔记
- python编程(反汇编)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。