8086汇语言学习笔记.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8086汇语言学习笔记

8086汇编语言学习笔记 一、debug的使用,模拟8086的情况 d 7c0:0,查段地址为7c0,偏移地址为0的内存中的数据,是十六进制表示的数 d 9000:0,查段地址为9000,偏移地址为0的内存中的数据,是十六进制表示的数 r,会显示所有寄存器中的值,比如ax,bx,cx,dx,cs,ip等 r cs,根据提示可以调整cs寄存器的值 a 1000:0 ,根据提示,可以从1000:0处开始输入汇编指令,比如mov ax,1c9aH,或者mov ax,126 e 1000:0000 01 02 03 04,表示将01 02 03 04顺序填入1000:0000表示的内存处 u 1000:0,可以查1000:0内存处的数据及其对应汇编指令 t,执行cs:ip寄存器所指的指令 g 0012,从cs:ip执行到cs:0012处,中间不停顿 p ,遇到loop循环,则一次把所有循环执行完再退出。 二、各寄存器的作用 1、ax,bx等一般寄存器,可暂存数据 2、cs,ip 下一条要执行的指令存储在cs为段地址,ip为偏移地址的内存中 3、ds 数据段寄存器,比如mov al,[0],表示将ds:0这个内存中的数字传入al中。 要将内存10000H中的数传入al中,则应该这样: mov ax,1000 mov ds,ax ,因为不能直接mov ds,1000 mov al,[0],寄存器al若为16位,则内存中有一个字要移入al,要是为32位,则内存中有2个字要移入al mov bl,[ax],将ds:ax表示的内存的字节传入bl寄存器中 mov bx,[ax],将ds:ax表示的内存的字传入bx寄存器中 4、ss,sp ss存储堆栈段的段地址,sp存储堆栈段的偏移地址,push和pop指令涉及到的内存就是ss:sp指向的内存 5、cx 计数寄存器,主要是存储循环程序要循环执行的次数。存放程序在内存中的长度? 6、注意段寄存器cs,ds,ss均不能直接将数据输入。 7、在mov ax,[si+di]这个[。。。]省略号只能填入如下四个寄存器:bx,si,di,bp,其余的比如ax,cx,dx均是错误的,要是ss,cs,ds,更是错误的。 在[。。。]中使用bp,则段地址默认为ss,显性指示段地址除外。 三、内存相关部分参见二 1、 a、mov al,[ax],其中的al指明是字节操作,即一次只移动一个字节的内存 mov ax,[0],其中的ax指明是字操作,即一次移动一个字的内存 b、若没有寄存器,则可以使用word ptr标明是字操作,这是在masm中的用法,比如 inc word ptr ds:[0] 用byte ptr标明这是字节操作,这是在masm中的用法,比如 inc byte ptr ds:[0] c、push [1000H],不用指明,直接进行字操作 四、各种指令 1、mov,移动,比如mov ds,ax将ax中的数据移入ds中 2、add,加法,比如add ax,bx,将bx中的值与ax中的值相加并存入ax中 3、sub,减法,比如sub ax,bx,将ax中的值减去bx中的值并存入ax中 4、push,入栈,比如push ax,将ax寄存器中的值压入堆栈ss:sp指向的内存当中,并把sp的值改为sp-2(这是在8086当中,因为ax是16位寄存器,而内存单元为8位,因此一个寄存器的值要用两个内存 单元来存放) 5、pop,出栈,比如pop ax,将ss:sp指向的内存的值送入ax中,并把sp的值改为sp+2 pop [0],将ss:sp内存中的数据弹出到ds:0内存中,注意pop操作是字为单位的操作 6、注意push和pop指令中的超栈的界限问题 7、inc bx将bx中的值加1。 8、dec bx将bx中的值减1。和inc bx正好相反。 五、microsoft asm格式下的各种命令: 0、一个程序要编译运行的基本架构: assume cs:code code segment start: .... mov ax,4c00H int 21H code ends end 这几行是基本的,不然程序无法编译运行。 1、程序完后要输入 mov ax,4c00H int 21H 帮助程序返回。 2、利用loop实现循环 mov cx,11,将cx寄存器值置为11 s:add ax,ax,执行ax=ax+1 add bx,bx,执行bx=bx+1 loop s,执行cx=cx-1,cx==0,则往下,cx!=0,则转到s标记的内存地址中继续执行 3、在汇编程序中,数据不能由字母开头,故 mov ax,FFFFH不合法,要改为mov ax,0FFFFH 4、debug中 mov ax,[0]表示将ds:[0]内存中的值

文档评论(0)

ikangdwe + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档