zoukankan      html  css  js  c++  java
  • [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 壹

    注意:本文经过原作者授权转译,转载请标明出处

    原文地址:http://mrjester.hapisan.com/04_MC68/Sect01Part06/Index.html

    条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
    翻译若有不足之处欢迎批评指正

    译文:

    "如果建筑工人像程序员码代码一样去码砖头,那么仅需要一只啄木鸟就可以毁灭整个人类文明了" ---- 一条技术墨菲定律

    简介

    在继续学习其他指令之前,关于"寻址"还有很多重要的东西需要了解,我们还要康康一些基本的程序流程还有编写汇编代码的思路

    奇数地址 (Odd Addressing)

    到目前为止,你可能已经见过了很多的从内存中读写数据的例子,比如:

        move.w     $00000046, d0

    然而你不知道的是,当操作的地址是奇数时,你不能操作一个或是一个长字的数据,比如下面这个非法的例子

        move.w     $00000047, d0     

    由于00000047是一个奇数 (奇数地址/偏移量),m68k 无法处理它,然后会报一个"地址错误" (address error) 的错误

    对于奇数的地址,如果你想访问它的话,只能使用字节长度的指令:

        move.b     $00000047, d0     

    上面这条指令就没问题,因为从奇数的地址中只允许访问一个字节

    同样的规则也适用于"地址寄存器",当你的地址寄存器中有一个奇数的地址的时候,然后尝试去_通过寄存器间接寻址_访问一个内存中的或是长字的数据,m68k 也会出错:

        movea.l    $00000047, a0
        move.w     (a0), d0          

    这个规则不仅是对move有效,而且对所有的指令都适用,只要你保证从奇数地址中只读取字节长度的数据就没问题

    程序流

    你可能已经自己琢磨出来这是什么意思了,是的我偏题了。当我们一条指令接着一条指令的编写汇编代码时,程序的执行方向都是向下的:

        move.b     #$20, d0          
        move.b     d0, d1            
        move.w     d2, d0            

    总是向下的,一条接着一条

    但是有一些特殊的指令能够打乱这种顺序,这我们以后再说

    家庭作业

    锵锵锵!机会来了!赶快来测试下自己学 (wang) 会 (ji) 了多少吧!
    下面是一串操作数据的指令:

        move.w     #$0123, d0
        move.b     d0, d1
        move.w     d1, d2
        move.l     #$FFFF0000, d3
        move.w     d0, d3
        move.l     d3, d0
        move.w     d2, d0

    上面所有的数据寄存器的初始内容都是00000000,当所有的指令执行完之后,d0里的内容会是什么呢?

    答案见下一节,请在看答案前最好自己捋一遍

    目录
    上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 壹 - 基础介绍 | 5. MOVE 指令
    下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 壹 - 基础介绍 | 7. 家庭作业答案 - 1

  • 相关阅读:
    Java基础知识三点
    《计算机网络》读书笔记
    Shell编程初步
    《现代操作系统》读书笔记
    《数据库系统概论》读书笔记
    《数据结构》读书笔记
    Linux使用笔记
    【Thinking in Java】读书笔记
    算法题摘录六
    算法题摘录五
  • 原文地址:https://www.cnblogs.com/strawhatboy/p/12298080.html
Copyright © 2011-2022 走看看