コンピュータアーキテクチャおよびインターフェイステクニカルノート(B)

前注:https://www.cnblogs.com/Tony100K/p/11653755.html

転送タイプ命令

  • JMPラベルセグメントにおける直接転送
  • MOV BX、1200H JMP BX IP = 1200Hの実装が完了した後
  • MOV BX、1200
  • JMP WORD PTR間接転写【BX】内側部分、二つのユニット1200および1201はIPを与え
  • 伝達セグメント32は、JMP FARラベルの間であります
  • 間接転写JMP DWORD PTR [BX] DWORD手段32
  • 高-CSを送信するためにIP、アドレスを送信するために低アドレス
  • -128〜127の条件付き転送範囲のみ

  • 8ビットテーブル正\負の数、及びゼロシンボルは、データ・メモリ・セグメント統計100のアドレスにつながっ

  • START: XOR AL,AL
         MOV PLUS,AL
         MOV MINUS,AL
         MOV ZERO,AL
         LEA SI,TABLE
         MOV CX,100
    CHECK: LODSB
         OR AL,AL
         JS X1
         JS X2
         INC PLUS
         JMP NEXT
    X1:    INC MINUS
         JMP NEXT
    X2:    INC ZERO
    NEXT:  DEC CX
         JNZ CHECK
         HLT

ループ制御コマンド

  • また、-128-127の非常に狭い範囲であります

  • CXサイクル

  • 無条件ループサイクルは、CX限り0に等しくありません

  • LOOPZ CXはZFサイクルを継続するために1に等しく、0に等しくありません

  • LOOPNZ CXが0に等しくない場合、ZFは続行0に等しいです

  • DATAは、MINとMAX率いるメモリユニットに、それぞれ最大値及びシンボルの最小数を識別し200 16ビット符号付き数を、記憶し、アドレス・メモリ・セグメントにつながっ

  • START: LEA SI,DATA
         MOV CX,200
         CLD
         LODSW
         MOV MAX,AX
         MOV MIN,AX
         DEC CX
    NEXT:  LODSW
         CMP AX,MAX
         JG LARGE
         CMP AX,MIN
         JL SMALL
         JMP GOON
    LARGE: MOV MAX,AX
           JMP GOON
    SMALL: MOV MIN,AX
    GOON:  LOOP NEXT
         HLT

プロシージャコール命令

  • 呼び出し元のブロック内
  • CALL TIMER
  • CALL WORD PTR [SI]
  • IPには、2つのSI後
  • セグメント間の内部コール
  • CALL FAR TIMER
  • CALL DWORD PTR [SI]
  • RETリターン命令は、サブルーチンの最後の命令は、RETでなければなりません

割り込み制御命令

  • 遠くプロシージャ・コールは、あなたがFLAGSを記録する必要があります
  • INT N N * 4である割り込みサービスルーチンエントリアドレス記憶部オフセットアドレス後
  • *

実装プロセス

  • FLAGSプッシュ
  • 次の命令INT命令CS \ IPプッシュ
  • N * 4割り込みベクタアドレスを格納します
  • CS IPへの割り込みベクタ
  • 割り込みサービスルーチンに

プロセッサの制御命令

フラグ操作

  • CLC 清零标志位

  • STC 置1标志位

  • CMC 取反C
  • CLD
  • STD
  • CLI 关中断
  • STI IF置1 开中断

汇编语言源程序

过程

  • 输入汇编语言源程序 .ASM
  • 汇编 .OBJ
  • 链接 .EXE
  • 调试 最终环境

语句类型

  • 指令性语句 CPU执行的语句
  • 指示性语句 不执行 告诉汇编程序定义了多大内存等作用

格式

  • [标号:][前缀]助记符[操作数],[操作数][;注释]

  • 伪指令助记符 操作数[,操作数,...][;注释]

常量

  • 数字常量
  • 字符串常量 'ABCD' 汇编时被译成对应的ASC码

变量 内存单元的符号地址

  • 段值 变量所在的段地址
  • 偏移量 变量所指单元的偏移地址
  • 类型

表达式

  • 算术 逻辑 关系运算

  • 取值运算符

    • OFFSET 获得变量或者标号的偏移地址

    • SEG 获得变量或者标号的段地址

    • MOV AX,SEG 去变量的段地址送给DS
      MOV DS,AX
      MOV BX,OFFSET DATA 取变量的偏移地址送给BX
    • 属性运算符

    • MOV BYTR PTR[BX],12H 字节12H
      MOV WORD PTR[BX],12H 字0012H

伪指令

作用

  • 定义变量
  • 分配存储器
  • 定义逻辑段
  • 指示程序开始和结束
  • 定义过程

数据定义伪指令

指令助记符 大小
DB 1字节
DW 1字
DD 2字
DQ 4字
DT 10字

\[ \begin{array}{l}{\text { DATAI DB } 11 \mathrm{H} \text { , 22 H, 33H, 44H }} \\ {\text { DATA2 DW } 11 \mathrm{H}, 22 \mathrm{H}, 3344 \mathrm{H}} \\ {\text { DATA3 DD } 11 \mathrm{H}^{*} 2,22 \mathrm{H}, 33445566 \mathrm{H}}\end{array} \]

第二行的11H就相当于0011H
第三行的22H就是00000011H

注意高位对应高地址

DATA1 DB 'ABCD',66H 注意'ABCD'是四个变量

重复操作符

为一个区域各单元设置相同的初值
M1 DB 10 DUP(0)
定以一个以M1为首地址的10个字节单元,并且每个字节单元的初值都是0

MEM1 DB 34H,'A',?(问号表示一个随机数,占1个字节单元)
DW 20 DUP(?) 40个单元的随机值

\[ \begin{array}{l}{\text { M1 DB 'How are you?" }} \\ {\begin{array}{ll}{\text { M2 DW 3 DUP(11H), 3344H }} \\ {\text { DB } 4 \text { DUP ( 2 ) }} \\ {\text { ( M3 DB 3 DUP (22H, 11H, ?) }}\end{array}}\end{array} \]

符号定义伪指令

  • EQU 用一个符号代替表达式
  • 符号名 EQU 表达式
  • EQU不会占用内存空间

段定义伪指令

  • 说明逻辑段的起始和结束
  • 说明不同程序模块中同类逻辑段之间的练习形态

  • SEGMENT [定位类型][组合类型][类别]

    ENDS

  • DATA SEGMENT
      MEM1 DB 11H,22H
      MEM2 DB 'HELLO'
      MEM3 DW 2 DUP (?)
    DATA ENDS
  • 段名也表示逻辑段的段地址

  • 变量在逻辑段中的位置就代表了它的偏移地址

设定段寄存器伪指令

  • ASSUME 段寄存器名:段名

结束伪指令

  • END [标号]

  • 只有代码段不需要初始化

过程定义伪指令

过程名 PROC [NEAR/FAR] (段内/段外)

​ RET 负责返回断点

过程名 ENDP

  • 过程名是过程体的入口地址

  • DELAY PROC
      PUSH BX
      PUSH CX
      MOV BL,2
    NEXT:MOV CX,4167
    W10M:LOOP W10M
       DEC BL
       JNZ NEXT//一共循环了2*4167次
       POP CX
       POP BX
       RET
    DELLAY ENDP
  • CALL DELAY 调用延时子程序

宏定义伪指令

  • 与过程不同,不能成为一段可以独立执行的代码,只能和源程序一起用

  • 宏命令名 MACRO <形式参数>

    ENDM

  • DADD MACRO X,Y,Z
       MOV AX,X
       MOV AX,Y
       MOV Z,AX
       ENDM
  • DADD DATA1,DATA2,SUM 来进行调用

  • 形参和实参的位置必须一一对应

调整偏移量伪指令

ORG 表达式(要求计算结果为非负常数)

DATA SEGMENT
    ORG 1200H
    BUFF DB 1,2
DATA ENDS

这样,BUFF的偏移地址就变成了1200H

系统功能调用

  • BIOS 驻留在ROM的基本输入输出系统

DOS(磁盘操作系统)功能调用的基本步骤

  • 将调用参数装入指定的寄存器
  • 将功能号装入AH
  • 按中断类型号调用DOS中断
  • 检查返回参数是否正确

MOV AH,功能号
<置相应参数>

INT 21H

单字符输入

MOV AH,01
INT 21H
可以敲一下键,键在AL中
GET KEY:MOV AH,1
        INT 21H
        CMP AL,'Y'
        JZ YES
        CMP AL,'N'
        JZ NO
        JMP GET KEY

字符串输入

  • AH<-- 功能号10
  • DS:DX<---字符串在内存中的存放地址

  • DAT1 DB,20,?,20,DUP(?)//在数据段中定义
    
    
    LEA DX,DAT1
    MOV AH,0AH
    INT 21H

单字符输出

  • MOV AH,2
    MOV DL,41H
    INT 21H

字符串输出

  • AH=09H
  • 被显示的字符串必须以'$'为结束

返回操作系统功能

  • 功能号 4CH
  • 常用于程序结尾处

おすすめ

転載: www.cnblogs.com/Tony100K/p/11761147.html