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

作者: 那个混子 | 来源:发表于2021-10-20 23:30 被阅读0次

第五章

前言

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

正文

[bx]、loop定义

  • [bx] 的含义:[bx]同样表示一个内存单元,它的偏移地址在bx中,段地址默认在ds中
  • loop:循环指令
    格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作,
    (cx) = (cx) - 1;判断 cx 中的值,不为零则转至标号处执行程序,如果为零则向下执行。

[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                 ;结束本次程序

注意:

  • 汇编语言中的注释用;之后的为注释内容
  • segment 说明一个段的开始,ends说明一个段的结束
  • end指结束对整个程序的编译
  • assume 假设的意思,假设某段汇编与寄存器关联
  • 上述例子中的s是一个标号,标号实际上指的是一个地址
    *mov ax,4c00h int 21h表明应用程序要退出,并为调用本程序的程序返回00,传递退出信息。
  • 上述程序使用es 存放目标空间0020:0~0020:b 的段地址,用ds 存放源始空间ffff:O~ffff:b 的段地址。在访问内存单元的指令“mov es:[bx],al”中,显式地用段前缀“es:”给出单元的段地址,这样就不必在循环中重复设置ds。(es相当于段地址的中间变量)

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

结束

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

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

相关文章

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

    第五章 前言 本章主要介绍了[BX]、LOOP的相关使用及含义,主要还是通过程序例子学习理解,其中LOOP是一个循...

  • 混子汇编语言学习之02笔记

    第2章 寄存器 开章: 前面有博世面试的时候,就问过一个问题,为什么要有寄存器?当时自己也没有说清楚,看完这一章...

  • 混子汇编语言学习之01笔记

    第一章 基础知识 1、指令 机器指令:CPU能直接识别并执行的二进制编码,就是一些二进制数。汇编指令:汇编指令...

  • 混子汇编语言学习之03笔记

    第3章 开篇引言 本章核心内容为字的理解认识、栈、和几个汇编指令的理解。栈非常重要,念“zhan”,这个东西也是面...

  • 混子汇编语言学习之04笔记

    第四章 对应参考资料,是第四章内容了 前言 在本章主要简述了程序整个过程(编辑、编译、连接、载入、运行),这个理解...

  • 混子汇编语言学习之06笔记

    引言 看资料的第六章内容,都是一些汇编代码案例,本章内容较少,简单记录一些,方便日后随时随地都可以查看。学到这里,...

  • 混子汇编语言学习之07笔记

    看了第七章内容,大概记录一下 引言 这段时间学的有点慢,不过慢慢的也看了7章的内容了,下面也是通过例子熟悉学习,这...

  • Stone历史剧》--两晋 之 魏晋奇葩说

    《Stone历史剧》--两晋 之 魏晋奇葩说 原创 2016-05-24 二混子stone 混子曰 奇葩是真多啊!

  • 《Stone历史剧》--两晋 之 东晋真纠结

    《Stone历史剧》--两晋 之 东晋真纠结 原创 2016-05-03 二混子stone 混子曰 一个用生命总结...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

网友评论

    本文标题:混子汇编语言学习之05笔记

    本文链接:https://www.haomeiwen.com/subject/fgmzoltx.html