汇编随笔1

/*碎碎念

先是纯个人想法吧,大一也学过c,c++,然后到了java,不知道为什么其实是不喜欢面向对象的,不清楚为什么吧,就感觉做什么都很懵,代码写的很随意,然后学下来也不知道学了什么,感觉就是在一个编译器上面写写写,老师说课设可以自己写一个编译器的时候就惊呆了,哇塞编译器不是规定的嘛,没有编译器怎么写代码,现在想想其实挺可笑……因为没有开设过关于计算机硬件方面的学科,加之自己也不是一个勤快好学的人,想过去了解但是总是没有做过,这时候汇编这门课程开设了,很多学长学姐都说汇编超级难,抱着战战兢兢的心态上了课发现这门课程意外的很合我的胃口,比起作为一门编程语言,感觉更适合作为大一时的基础课程上,它更加贴近计算机本身,规则感强了很多,能够帮助我们了解计算机执行指令的过程,实现代码的过程也更为清晰。汇编给我的感觉很严谨,很规范,由此也增加了它的复杂性,有很多零零碎碎的点,我算个零基础的小白吧,也不知道怎么写技术性的博客,就权当用来记录学习汇编过程中一些易忘的小笔记吧。*/

笔记:

磁盘->内存->cp

1B=8bit 1kB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB

在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。

8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。可寻址的内存空间为1MB。

cpu是由运算器、控制器和寄存器组成的,这些器件靠内部总线(总线分为内部总线和外部总线,外部总线是连接cpu和主板上的器件,主要分为数据总线(宽度决定CPU和外界的数据传送速度,n根数据总线一次可以传送一个n位的二进制数据)控制总线(宽度决定CPU对外部的控制能力)地址总线(‘有N根地址线’则地址总线宽度为N,最多可以寻找2的N次方个内存单元)相连接。 

 

通用寄存器:AX、BX、CX、DX,可分为两个可独立使用的8位寄存器来用(Eg:ax分成al和ah,运算结果溢出时候,溢出的数字不会存放在ah中。)

汇编指令不区分大小写。 

两条指令:mov ax,bx    add ax,bx

 

地址加法器:物理地址=段地址*16+偏移地址

                                       CS             IP

8086中,任意时刻,CPU将CS:IP的指向内容当作指令执行;

修改:jmp 段地址:偏移地址;仅修改IP:jmp 某一合法寄存器

 

debug命令:

r<回车>显示寄存器的值   r ax<回车>查看ax的值可修改

d 地址范围 显示指定范围内存储单元的内容   d 地址 从指定地址开始显示128 字节   d从当前开始显示128个字节

e 地址从指定偏移地址开始修改(连续修改)存储单元内容   e地址 数据(空格隔开) 从指定地址开始用给定数据修改存储单元

a 从指定地址开始输入符号指令

g=地址1 地址2 运行地址1到地址2 之间的程序    g=偏移地址 从指定地址开始执行,直到结束或者遇到INT     g 偏移地址 从当前执行到指定偏移地址之前的指令  从cs:ip开始执行直到结束或遇到INT

t=偏移地址或p=偏移地址(遇到INT时必用) 从cs:ip开始单步执行

u 地址范围 将制定内存地址单元的内容反汇编成机器指令   u 地址 从指定地址开始反汇编连续32字节   u从当前偏移地址开始连续32字节

 

在汇编程序中,数据不能以字母开头,要在前面加上零;Eg:0A00h

数据段

段地址->ds

/*mov bx,1000H

  mov ds,bx

  mov al,[0] */

8086自动取ds中的数据为内存单元的段地址,不支持将数据直接送入段寄存器,于是用一个寄存器进行中转;【…】表示一个内存单元,里面的数字表示内存单元的偏移地址

栈段

段地址->ss,栈顶偏移->sp

任意时刻,ss:sp指向栈顶元素

设10000H-1000FH为栈段,ss->1000H,sp->0010H

push ax ;将ax中的数据入栈 ,sp=sp-2

pop ax   ;从栈顶取出数据送入ax,sp=sp+2

 

转载于:https://www.cnblogs.com/bbbbz/p/7565659.html

汇编语言可以使用int 16h中断例程的0号子程序来读取键盘输入。具体步骤如下: 1. 首先,需要检测键盘缓冲区中是否有数据。 2. 如果没有数据,程序将一直等待,直到有数据被输入到键盘缓冲区中。 3. 一旦有数据进入键盘缓冲区,程序将读取缓冲区中最早进入的键盘输入,从队头开始读取。 4. 将读取的扫描码送入ah寄存器,将ASCII码送入al寄存器。 5. 最后,将已读取的键盘输入从缓冲区中删除。 在汇编语言中,可以使用以下指令来执行上述步骤: ``` mov ah, 0 int 16h ``` 这样就可以读取键盘输入,并且从键盘缓冲区中删除。执行以上指令后,扫描码将存储在ah寄存器中,ASCII码将存储在al寄存器中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [汇编语言-使用BIOS进行键盘输入和磁盘读写](https://blog.csdn.net/Cdreamfly/article/details/104908167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [汇编语言随笔(15)- 对键盘输入进行处理(int 9 和 int 16h 中断例程)](https://blog.csdn.net/Little_ant_/article/details/108691941)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值