iOS逆向C语言&嵌入式嵌入式 Linux C ARM

混子汇编语言学习之05笔记

2021-10-20  本文已影响0人  那个混子

第五章

前言

本章主要介绍了[BX]、LOOP的相关使用及含义,主要还是通过程序例子学习理解,其中LOOP是一个循环指令,类似于C语言中的for循环,(cx)就是对应的循环变量i,学习这这些还得通过例子学习。

正文

[bx]、loop定义

[bx]例子:

mov ax,2000H    
mov ds,ax             ;前两句主要是对DS赋值 的,ds=2000H;
mov bx,1000H          ;bx=1000H
mov ax, [bx]          ;此处bx的值就是偏移地址值,即把地址为2000H:1000H中的数据赋值给ax,ax=00beH;
inc bx                ;将bx的内容加1 操作,即bx=1001H
inc bx                ;将bx的内容加1 操作,即bx=1002H
mov [bx] ,ax         ;将ax的值传入地址2000H:1002H中去,此时2000H:10002H地址中存be
                          ;2000H:10003H中存00;
inc bx
inc bx              ;将bx的内容加1 操作,执行后bx = 1004H,需要注意是对bx操作而不是对应地址的值操作
mov [bx] ,ax       ;将ax的值传入地址为2000H:10004H中去
inc bx
mov [bx] ,al      ;将al的值送入地址为2000H:10005H中去,即2000H:10005H中存的值为BE
inc bx
mov [bx] ,al    ;将会al的值送入地址为2000H:1006H中去,即2000H:10006H中存的值为BE
执行后

LOOP例子:

要求:
assume cs:code    ;下面名字为code的段程序与段寄存器cs关联
code segment    ;命名一个叫code的段
mov ax,0ffffh    
mov ds, ax             ; 最终实现段地址寄存器(ds)=0ffffh,
mov ax,0020h
mov es,ax            ; (es)=0020h
mov bx,0              ; (bx)=0,此时ds:bx指向ffff:0,es:bx指向0020: o
mov cx,12              ; ( cx)=12,循环12次

s :mov dl,[bx]        ; (dl)= ( (ds)* 16+(bx)),将ffff:bx中的数据送入dl
mov es: [bx ] ,dl     ; ( (es)*16+(bx) )=(dl),将dl中的数据送入0020:bx
inc bx                  ; (bx)=(bx)+1
loop s              ;循环从s处重新开始执行,需要注意执行到这里cx=cx-1;然后判断cx是否为零,不为零则跳转s
                    ;执行循环体,如果为零则执行后面的指令
mov ax, 4c00h 
int 21h             ;退出程序 
code ends           ;结束段
end                 ;结束本次程序

注意:

参考资料 王爽《汇编语言第三版》

结束

本章理解一下例子就可以,东西太多记不住!

欢迎关注本人微信公众号:那个混子
记录自己学习的过程,分享乐趣、技术、想法、感悟、情感!

上一篇下一篇

猜你喜欢

热点阅读