内容简介:大学时候学习的单片机原理和微机原理有用到汇编语言,但是当时觉得太过晦涩难懂,就没有学太懂。最近开始学习汇编语言,决定把汇编好好学习一下,网友介绍了王爽老师的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编程(反汇编)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning JavaScript
Shelley Powers / Oreilly & Associates Inc / 2006-10-17 / $29.99
As web browsers have become more capable and standards compliant, JavaScript has grown in prominence. JavaScript lets designers add sparkle and life to web pages, while more complex JavaScript has led......一起来看看 《Learning JavaScript》 这本书的介绍吧!