【汇编语言王爽】学习笔记-p40-p54

简介: 【汇编语言王爽】学习笔记-p40-p54

1668158048506.jpg

通过点的形式 把立即数写到外面 对比c语言

1668158058847.jpg


结构体名字 数组名称 都相当于 基址bx;然后,用idata来定位结构体中的某一个数据项, 然后yao.team[1],里面的【1】也就相当于si

1668158067163.jpg

1668158078055.jpg


div除法指令

被除数:默认放在ax 或者dx ax

1668158089843.jpg

1668158107707.jpg

1668158117353.jpg


内存中实施除法

1668158126111.jpg


dup 设置重复的数据 db 3 dup(0)

db dw dd

1668158136320.jpg

1668158146955.jpg

1668158155314.jpg


流程转移-导学

1668158164200.jpg


转移指令 如jmp—可以修改ip或者同时修改cs和ip

分类 段内转移

段间转移

1668158182800.jpg


无条件转移jmp 条件转移jcxz 循环指令loop 过程 中断

offset 去的标号的偏移地址 offset 标号


1668158193871.jpg

在程序运行时,把某个指令复制到另一个地址—非常厉害的能力!

添加两条指令,让改程序在运行中将s处的一条指令复制到s0处

s: mov ax,bx
mov si,offset s
mov di,offset s0
mov cx,cs:[si]
mov cs:[di],cx
s0: nop
nop


1668158214978.jpg

无条件转移jmp

1668158225998.jpg


根据位移进行转移—jmp short s–跳转相对位置—可正可负 也不用自己算 用补码表示 八位位移由编译程序在编译时算出jmp short s


立即数在机器指令中是有所体现的

1668158238453.jpg

近转移 jmp near ptr 标号

1668158262782.jpg


远转移far ptr s

1668158282034.jpg

1668158294319.jpg

转移地址在内存中的jmp word ptr ;jmp dword ptr

1668158310419.jpg

1668158318637.jpg


jmp 小结

1668158330322.jpg


注意:不能直接jmp2000:0100这样的 debug行 别的不行

1668158340615.jpg


jcxz :j跳转 cx zero 当cx等于0 跳转–转移的是位移

1668158351233.jpg


loop指令: 位移:要跳转的指令地址减去loop指令自己的下一条指令的首地址即:例如06-0a=-4----编译成为补码=FC

1668158360205.jpg


段内转移 都是一些相对转移 相对位移 有不少好处方便了浮动装配

1668158369594.jpg


模块化程序设计-主程序调用 子程序call,返回ret-返回到调用call的下一条语句继续执行下去–实质 修改ip

1668158377939.jpg


call 标号 ----调用子程序-cpu进行了两步操作:1将当前的ip或者ip和cs压入栈中(call指令的下一条地址);2转移到标号处执行指令

call
push ip
ip=ip+16位位移

1668158391360.jpg

段间转移 call far ptr 标号;

1 cs ip 都压栈

再跳转

1668158400657.jpg

1668158409153.jpg



转移到寄存器内的地址call ax

1668158420498.jpg


call word ptr 内存单元地址

1668158430068.jpg

1668158439429.jpg


返回指令ret–相当于pop ip用栈中的数据 修改ip内容,从而实现近转移和

1668158452906.jpg


retf—pop ip; pop cs 实现远转移返回

1668158460770.jpg


例子 call 和 ret

1668158470374.jpg


call和ret 解决问题 套路;第二个ret返回的时候返回到第一个call的当时的ip所指向的指令–即第一个call下面的指令

1668158478354.jpg

1668158486862.jpg


调用子程序call 逐步返回

1668158494221.jpg

计算2的n次

1668158502049.jpg

1668158515123.jpg

为call ret 指令 设置栈

call以后压栈ip

改ip

1668158523957.jpg


乘法 mul bl 对比 除法只用给出 除数

1668158532220.jpg

1668158541300.jpg


汇编语言的模块化程序设计–参数和结果的传递问题

1668158559391.jpg


常用 寄存器存 参数和结果

1668158568712.jpg

1668158579606.jpg

1668158590414.jpg1668158600062.jpg



内存单元批量传递数据

1668158608658.jpg


也很常用 栈 传递参数 压栈 弹栈

1668158615757.jpg1668158623845.jpg

1668158632277.jpg


寄存器冲突问题—编写子程序避免冲突寄存器—方案:在子程序的开始,将要用的寄存器的内容都保存起来,子程序返回前再恢复

1668158008718.jpg

1668158018138.jpg

1668158029337.jpg


相关文章
|
存储 程序员 C语言
【汇编语言王爽】学习笔记p54-p79(下)
【汇编语言王爽】学习笔记p54-p79
111 0
【汇编语言王爽】学习笔记p54-p79(下)
|
C语言 Perl
【汇编语言王爽】学习笔记p54-p79(上)
【汇编语言王爽】学习笔记p54-p79
118 0
【汇编语言王爽】学习笔记p54-p79(上)
|
人工智能 BI C语言
【汇编语言王爽】进阶-笔记 p22--p40(下)
【汇编语言王爽】进阶-笔记 p22--p40
108 0
【汇编语言王爽】进阶-笔记 p22--p40(下)
|
安全
【汇编语言王爽】进阶-笔记 p22--p40(上)
【汇编语言王爽】进阶-笔记 p22--p40
100 0
【汇编语言王爽】进阶-笔记 p22--p40(上)
|
存储
【汇编语言王爽】笔记1-p1-p17(上)
【汇编语言王爽】笔记1-p1-p17
100 0
【汇编语言王爽】笔记1-p1-p17(上)
|
6月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
222 2
|
1月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)