IBM汇编语言教程日文版lec03

合集下载

IBM-PC汇编语言指令集

IBM-PC汇编语言指令集

数据传送指令集MOV功能: 把源操作数送给⽬的操作数语法: MOV ⽬的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压⼊或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址⾄寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加⼀或减⼀语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取⼆进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: ⾮压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执⾏BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定⽅向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: ⽐较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执⾏语法: JMP 地址JXX功能: 当特定条件成⽴则跳往指定地址执⾏语法: JXX 地址注: A: ABOVE,当C=0,Z=0时成⽴ B: BELOW,当C=1时成⽴ C: CARRY,当弁时成⽴ CXZ: CX寄存器的值为0(ZERO)时成⽴ E: EQUAL,当Z=1时成⽴ G: GREATER(⼤于),当Z=0且S=0时成⽴ L: LESS(⼩于),当S不为零时成⽴ N: NOT(相反条件),需和其它符号配合使⽤ O: OVERFLOW,O=1时成⽴ P: PARITY,P=1时成⽴ PE: PARITY EVEN,P=1时成⽴ PO: PARITY ODD,P=0时成⽴ S: SIGN,S=1时成⽴ Z: ZERO,Z=1时成⽴LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址 LOOPNE(Z) 地址标志位: ⽆CALL,RET功能: ⼦程序调⽤,返回指令语法: CALL 地址 RET RET n标志位: ⽆INT,IRET功能: 中断调⽤及返回指令语法: INT n IRET标志位: 在执⾏INT时,CPU会⾃动将标志寄存器的值⼊栈,在执⾏IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: ⽆CMPSB,CMPSW,CMPSD功能: 字符串⽐较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载⼊或存贮指令语法: LODSB LODSW STOSB STOSW标志位: ⽆REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S⽽定 对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

汇编语言第3章 指令系统和寻址方式

汇编语言第3章 指令系统和寻址方式

(二)与转移地址有关的寻址方式----寻找指令位置 物理地址=CS*16+IP 段内寻址:修改IP 段间寻址:修改CS,IP 1.段内直接寻址(intrasegment direct addressing) (IP)新= EA=(IP)旧+D8或16 分类: • 短跳转 D8 例:JMP SHORT next • 近跳转 D16 例:JMP NEAR PTR AGAIN
(DI) =(SS)*16+(BP) +displacement
例:mov AX,VAR[BX] (DS)=1000H,(BX)=1200H, VAR=1000H 物理地址=DS*16+(BX)+VAR =DS*16+1200+1000=12200H 若:(12200)=34H,(12201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:VAR[BX] 用途:处理成组数据(举例说明)
例:某接口的命令寄存器(port=126)的D7位控制成组 数据传送。发送成组传送命令。 MOV DX,126H IN AL, DX OR AL, 80H OUT DX, AL
• XLAT 换码指令(translate) *专用AL,BX 表长不超过256
例:LEA BX, TABLE ; (BX)=0040H
1.指出下列指令源操作数的寻址方式: (1) MOV SI,10 (2) MOV SI,[DI+2] (3) MOV SI,[DI] (4) MOV SI,[10] (5) MOV SI,BX (6) MOV SI,5[BX+DI] (7) MOV SI,[BP+DI] 2. 判断下列指令对错: (1) MOV SS,1000H (2) MOV DS, ES (3) MOV CS, AX (4) MOV 5, AL (5) MOV AX, BL (6) MOV [BX],[SI]

汇编语言IBM-PC绪论

汇编语言IBM-PC绪论
程序可读性差
由于缺乏高级语言的抽象,汇 编语言程序难以理解和维护。
与机器语言紧密相关
汇编语言直接对应于机器语言 的指令,因此执行效率高。
依赖特定处理器架构
每种处理器架构都有其对应的 汇编语言。
汇编语言的应用领域
系统软件
操作系统、编译器等核心软件通常使用汇编语言 编写,以提高执行效率。
游戏开发
某些游戏引擎和图形渲染部分可能使用汇编语言 优化性能。
IBM-PC汇编语言的编程模型
编程模型
IBM-PC汇编语言的编程模型包括程 序计数器、堆栈指针、寄存器等,这 些是汇编语言编程的基本概念。
程序结构
一个典型的IBM-PC汇编语言程序包 括程序头、程序主体和程序尾,其中 程序主体包含程序的指令序列。
03
IBM-PC汇编语言编程基础
汇编语言的基本语法
调试和优化汇编程序
调试汇编程序
掌握使用调试工具进行程序调试的方法,如设置断点、单步执行、查看寄存器和内存等,以便找出程 序中的错误和问题。
优化汇编程序
了解如何优化汇编程序的性能,如使用更快的指令、减少内存访问次数、优化循环结构等,以提高程 序的执行效率。
应用实例和案例分析
文件加密程序
通过编写一个简单的文件加密程序,了 解如何使用汇编语言实现加密算法,并 熟悉文件操作的相关指令和伪指令。
分支结构
使用跳转指令实现程序的 分支控制。例如,JMP、 JZ、JNZ等。
循环结构
使用循环指令实现程序的 循环控制。例如,LOOP、 LOOPZ、LOOPNZ等。
04
IBM-PC汇编语言进阶编程
子程序和中断的使用
子程序
子程序是一种封装特定功能的代码块,可以在程序中多次调 用。使用子程序可以减少代码重复,提高代码可维护性和可 读性。在IBM-PC汇编语言中,子程序的定义和调用需要使用 特定的伪指令。

lec06

lec06
PRG0601 START LAD LOOP LD ADDA ST OUT SUBA JNZ RET LEN DC BUF DC CNT DS END ; 教科書のPRG0501 初期設定 GR1,8 GR2,='0' 出力文字の生成 GR2,GR1 (次ページ参照) GR2,CNT 文字列の出力 BUF,LEN GR1,=1 GR1←GR1-1 LOOP
'o’ 'u’ 'n’ 't’ ' ’ '=’ ' ’ '8’
全 部 で 9 文 字
3
本スライド 2
作業6-1
ファイル名 work61.cas
上記のPRG0601をCaslBuilderを用いて記述した 後,アセンブル・リンク・実行し,8行のメッセージ が連続して出力されることを確認せよ。
※ 最初のLAD命令でGR1に8を設定しているが, この値を大きく(例えば,20)したときにどんな結果 になるか試してみよ。また,そうなる理由を考えよ。
PRG0604 《LOOP1の初期設定》 積を求める値:GR1 ← 1
ラベル:LOOP1 《LOOP2の初期設定》 加算する回数:GR2 ← GR1 加算する値:GR3 ← GR1 加算結果:GR4 ← 0(初期値) ラベル:LOOP2 加算:GR4 ← (GR4) + (GR3) GR2 ← (GR2) - 1 GR2≠0? NO GR1 ← (GR1) + 1 YES GR1<10? NO RETURN
5
1+2+3+・・・ を計算していき,和 が100以上になったら終了する
本スライド 5
作業6-2
ファイル名 work62.cas

IBMPC汇编语言

IBMPC汇编语言
BIOS键盘处理程序将取得的扫描码转换成相应的字 符码,大部分的字符码是一个标准的ASCII码;没有相 应ASCII的键,如Alt和功能键(F1~F10),字符码为 0;还有一些非ASCII码键产生一个指定的操作。
PPT文档演模板
IBMPC汇编语言
• 键盘缓冲区
• 键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下:
1B
键盘CTRL-BREAK控制
• 30—33
C
异步通信(COM1)•70—73
1C
定时器报时
• 34—37
D
硬盘
•74—77
1D
显示器参数表
• 38—3B
E
软盘
•78—7B
1E
软盘参数表
• 3C—3F
F
并行打印机
•7C—7F 1F 字符点阵结构参数表
PPT文档演模板
•BIOS中断向量
IBMPC汇编语言
PPT文档演模板
•表9.2 DOS中断类型
•地址(Hex) 类型码
•80—83
20
•84—87
21
•88—8B
22
•8C—8F
23
•90—93
24
•94—97
25
•98—9B
26
•9C—9F
27
•A0—FF
28—3F
•100—17F
40—5F
•180—19F
60—67
中断名称 程序结束,返回DOS DOS系统功能调用 程序结束地址 CTRL_BREAK退出地址 标准错误出口地址 绝对磁盘读 绝对磁盘写 程序结束,驻留内存 为DOS保留 保留(扩充BIOS中断向量) 为用户软中断保留

IBM汇编语言教程lec07

IBM汇编语言教程lec07

引数:GR1(n) 引数:GR1(n) 結果:GR2( …+n) 結果:GR2(1+2+ …+n)
GR2 ← (GR2) + (GR3)
YES
GR3=GR1 ? NO
GR3を GR3を復元 RETURN
GR3 ← (GR3) + 1 22
1. スタックのトップの値をPRに入れる 2. トップの値は不要→スタックポインタを更新 (トップの値をゼロクリアしたりしない)
100 102 CALL SUBA 102
200 SUBA …… 202 RET
スタック
17
練習問題7-1
ファイル名 work73.cas
自分の名前を出力(表示) 自分の名前を出力(表示)するサブルーチン NAME を5回連続し 5 て呼び出すプログラムを作成せよ。但し、出力(表示)回数を判定す る“繰り返し構造 構造”のプログラムとする。(CALL命令を5回記述する 繰 プログラムは不可) 尚、自分の名前はローマ字表記 ローマ字表記 ローマ字表記とする。 (1) 上記の処理を行うプログラムを work73.cas という名前で作成 する。 (2) このプログラムをシミュレーション実行し,自分の名前が5回出 力(表示)されることを確認せよ。
GR1 GR1 1回目の実行前 回目の 1回目の実行後 回目の 2回目の実行後 回目の 3回目の実行後 回目の 3 30 300 3000 GR2 GR2 10 10 10 10
7
汎用レジスタの退避・復元
被乗数 乗数 push
pop 積 サブルーチンの入口と出口で GR2とGR3 の値は同じ
8
PUSH命令・POP命令
21

IBM汇编语言教程 lec14

IBM汇编语言教程 lec14

※ 10倍の計算は シフト命令を用 いておこなう
GR0 <- GR0 * 10 GR0 <- GR0 + GR2
YES現在値を10倍 現在値を10倍
現在値と入力値を 現在値と入力値を加算
NO
指標(GR1)を+1し、その値が ILENの内容と一致したか
最終文字? 最終文字?
YES
GR0をDATAへ GR0をDATAへ格納 RETURN 8
WORKE1 初期設定(指標= 初期設定(指標=0等) 数値データのロード 数値データのロード データを左 データを左に1ビット 論理シフト 論理シフト
Yを 出力領域に'1'を格納 出力領域に 0 を 出力領域に'0'を格納
ヒント: 初期設定として,文字'0’と文字'1’を レジスタに用意しておくとよい。 LD GR6,='0' LD GR7,='1'
7
→ 245
数字列から2進数への変換 フローチャート
WORKE3 数字列の入力 数字列の 初期設定 GR0: 現在値(初期値0), GR1: 入力領域用指標(初期値0)
入力領域から1文字取り出す → GR2 数値化: #000F とANDを取る
1文字の取り出し 文字の 数値化(入力値) 数値化(入力値)
できるだけヒントを見ずにやってみよう
2
メモリ内容の2進数表示 フローチャート
ヒント: 16語からなる出力領域(OBUF)を用意しておき, データを左に1ビット論理シフトした時のオーバー フローフラグOFの値に応じて,文字'0’か文字 '1’を出力領域に格納する操作を16回繰り返す。 最後にOUT命令によって出力領域を出力する。

IBM汇编语言教程(日文版)lec01

IBM汇编语言教程(日文版)lec01

9
COMETⅡの構成
プログラムカウンタ 演算レジスタ
GR
演算回路
FR
主記憶
CPU
10
※ この図では省略されているが、スタック ポインタ(SP) というレジスタもある
COMETⅡ の主記憶 とレジスタ
COMETⅡではプロ グラムカウンタ PC のことをプログラム レジスタ PRと呼ぶ

CPU
主記憶
int main (void) { int c; c = getchar (); while (c != ‘.’) { printf (“’%c’\n”, c); c = getchar (); } return (0); }
Cによる記述の例
3
コンピュータの理解できることば アセンブリ言語
機械語と1対1に対応して,人に理解しやすい記号 に置き換えた言語 ⇒ 機械語に変換(アセンブル)して実行
1
コンピュータの理解できることば 機械語
CPUが理解できる数値(2進数、0/1)の羅列
番地 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A
主記憶の内容
0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

IBM-PC汇编语言程序设计 ppt课件

IBM-PC汇编语言程序设计 ppt课件

PSW标志 存放器
指令译码器
控制电路
器 0000 0010 02 0010 0000 20
第3章 80x86的指令系统和寻址方式
7
(3) 助记符和汇编言语
助记符是有助记忆、并能描画指令功能的符号。 通常是指令功能的英文单词的缩写。 例 数的传送指令用助记符MOV 加法用ADD,转移用JMP等
用助记符等表示的指令称为汇编格式指令 例 MOV AL, 0 汇编言语是汇编格式指令、伪指令及其运用的一组规那 么。 用汇编言语编写的程序称汇编言语程序。
30
4. 存放器间接寻址方式* ——EA在基址存放器(BX/BP)
或变址存放器(SI/DI)中
BX, SI, DI (DS)
(BX)
物理地址 = 16d (DS) + (SI)
(DI)
BP (SS) 物理地址 = 16d (SS) + (BP)
MOV AX, [BX]
PA = 16d (DS) + (BX)
1. 立刻寻址方式* —— 操作数在指令中给出
MOV AL, 5
MOV AX, 3064H
* 只能用于SRC字段
* SRC 和 DST的字长一致
3064H 适用于给存放器赋初值
MOV AH,
第3章 80x86的指令系统和寻址方式
21
2. 存放器寻址方式* —— 操作数在指定的存放器中 MOV AX, BX MOV AL, BH
第3章 80x86的指令系统和寻址方式
24
默许段选择规那么
访问类型 指令
所用段及段寄存 器
代码段 CS
缺省选择规则 用于取指
堆 栈 堆栈段 SS 局部数据 数据段 DS 目 的 串 附加段 ES

汇编程序设计进阶教程

汇编程序设计进阶教程

汇编程序设计进阶教程(中英文实用版)Title: Advanced Assembly Language Programming Tutorial标题:汇编语言编程进阶教程Section 1: Introduction to Assembly Language第一部分:汇编语言简介In this section, we will delve deeper into the world of assembly language programming.Assembly language is a low-level programming language that is used to program a computer"s central processing unit (CPU).It is a human-readable representation of the machine code that the CPU understands.In this tutorial, we will cover the basics of assembly language, including instructions, registers, memory, and input/output operations.在本节中,我们将更深入地了解汇编语言编程。

汇编语言是一种低级编程语言,用于编程计算机的中央处理单元(CPU)。

它是CPU理解的机器代码的可读人类表示。

在本教程中,我们将介绍汇编语言的基本知识,包括指令,寄存器,内存和输入/输出操作。

Section 2: Assembly Language Syntax第二部分:汇编语言语法Assembly language uses a set of mnemonic codes to represent machine instructions.These mnemonic codes are easier for humans to understand and remember compared to raw machine code.In this section,we will learn about the syntax of assembly language, including instructions, operands, and comments.We will also explore the different types of instructions in assembly language, such as arithmetic, logical, data transfer, and control instructions.汇编语言使用一组助记码来表示机器指令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– ややこしいことに,XOR (排他的論理和) を「論理加算」と呼ぶ 人もいる.もちろん,こちらはビット毎に考えるので,繰り上が りは無い.
17
本スライド13
作業3-4
ファイル名 work32.cas
上記のPRG0302をCaslBuilderを用いて記述した 後,ビルドし,デバッガによるトレース実行(F7)に よって,命令①~⑨の実行後に汎用レジスタ (GR1~GR4)とフラグレジスタ(OF,SF,ZF)の内 容がどう変わるかを調べよ。 また,命令③,⑤,⑨の実行結果でオーバーフ ローが発生する理由を述べよ。 (解答は「第3回確認クイズ」の用紙に)
第3回 演算処理(1)
今日の到達目標 1. デバッガの様々な使い方に慣れる 2. 加減算の方法,および“符号なし数値”と“符 号つき数値”の違いについて理解する 3. 命令によるフラグレジスタの変化について理 解する 4. CASLⅡの言語仕様について理解する
1
ブレークポイントとウォッチ式
・ブレークポイント プログラムの実行を中断する場所を指定する。デバッグ ウィンドウ中の“逆アセンブルペイン”で,中断したい命令 を ダブルクリックする。あるいは,“実行-ブレークポイ ントの設定/解除”に入って,追加・削除・一時的な無効 化を行う。 ・ウォッチ式 特定アドレスのメモリの内容を“ウォッチペイン”に表示 する。“実行-ウォッチ式の追加”に入って,表示するメモ リをアドレスかラベルで指定する。
4
作業3-1
ファイル名 wa55.cas
(1) CaslBuilderを起動し、このホーム中のSamplesフォルダにあるプログラム wa55.casを開き,今回の作業フォルダlec03に格納した後、ビルド(Ctrl+F9)し, アセンブルとリンクが正常に終了することを確認する。 ※ 作業2-1と同じ (2) デバッガを起動(F4)し,“実行-ブレークポイントの設定/解除”の中で“追 加”ボタンを押し,ラベル“LOOP”で指定される主記憶の場所にブレークポイ ントを設定する。この時,“逆アセンブルペイン(デバッグウィンドウの左上)” のラベル“LOOP”の場所に“進入禁止マーク”が付いていることを確認する。 また,“逆アセンブルペイン”上の“ST命令”をダブルクリックすると,同様に “進入禁止マーク”が付いてブレークポイントが設定されることを確認する。 (3) “実行-実行(GO)”(F5)でプログラムの実行を開始すると,ラベル“LOOP” の場所でプログラムの実行が一時停止することを確認する。さらに,F5 を数 回押すと,そのたびにラベル“LOOP”の場所で一時停止することを確認する。 (デバッグ時においては,一時停止した時点での汎用レジスタやメモリの内 容をチェックし,正常に動作していくことを確認しながら進めていく)
• 命令実行後のフラグレジスタの値 (共通)
OF 上記の範囲に収まらなくなった時,1にセットされる
SF
ZF
符号ビット(第15ビット)の値がセットされる
演算結果がゼロのとき,1にセットされる
15
算術演算命令の使い方
• レジスタデータ間の加算 ADDA GR1,GR2 GR1 ← (GR1) + • メモリデータ間の加算 (Z ← X + Y) LD GR1,X GR1 ← (X番地) ADDA GR1,Y GR1 ← (GR1) + ST GR1,Z (GR1) → Z番地 または LD GR1,X GR1 ← (X番地) LD GR2,Y GR2 ← (Y番地) ADDA GR1,GR2 GR1 ← (GR1) + ST GR1,Z (GR1) → Z番地 • レジスタの内容に定数を加える ADDA GR1,=3 GR1 ← (GR1) + • レジスタの内容を2倍する ADDA GR1,GR1 GR1 ← (GR1) +
• 論理加減算 (ADDL, SUBL) 対象データを“符号なし数値”として演算する 即ち,取り扱う数値範囲は 0 ~ 65535 • 算術加減算 (ADDA, SUBA) 対象データを“符号つき数値”として演算する 即ち,取り扱う数値範囲は -32768 ~ 32767 負数は2の補数で表される
• 命令実行後のフラグレジスタの値 (共通)
7
符号なしの加算・減算 PRG0301
① ② ③ ④ ⑤ ⑥ ⑦
PRG0301 START LD LAD ADDL LD ADDL LD SUBL RET ; DATA1 DC DATA2 DC END GR1,DATA1 GR2,50 GR1,GR2 ; レジスタ間の加算 GR3,=100 GR3,DATA2 ; 主記憶データとの加算 GR4,DATA1 GR4,=50 ; リテラル(定数)の減算
作業3-2
ファイル名 wa55.cas
(1) デバッガを起動(F4)し,もし,ブレークポイントが設定されていたら,すべて 無効にする。 (2) “レジスタペイン(デバッグウィンドウの右上)” の汎用レジスタ GR2 の内容 (#0000)をダブルクリックし,この値を #F0F0 に変更する。(正しく変更され ていることを確認せよ) (3) また,“メモリダンプペイン(デバッグウィンドウの左下)” の#0111番地の内 容(#000Bと示されている)をダブルクリックし、この値を #000C に変更する。 (正しく変更されていることを確認せよ) (4) 上記の状態で,“実行-トレース”(F7)によって、プログラムの最初の1命令 を実行すると,GR2 の内容が #F0F0 から #0001 に変化することを確認せよ。 (5) 上記を確認したあと, “実行-実行(GO)” (F5) を押すと,プログラムは最後 まで実行して,正常終了する。このとき,ラベル“ANS”で示される主記憶 (#010E 番地)の内容がどうなっているかと,その理由について考えよ。(今 回の修正を行う前は,1から10までの合計値 55(#0037)が格納されていた)
3
サンプルプログラム
ファイル名 wa55.cas
1から10までの和を求めるプログラム。 結果(55=#0037) はラベルANSで指定される主記憶に格納される。
このプログラム(wa55) は lec02 の中に格納さ れているはず。なければ、
C: → Program Files → caslbuilder → samples の中にある
(GR2)
(Y番地)
(GR2)
3 (GR1)
16
閑話休題 (by 中西)
「論理加算,論理減算の名称は不適切だ !?」
– 「加算」演算に対する修飾語として logical とはどういう意味 か? いったいどこに定義されているのか. – 単に16bitすべてを用いて正整数で扱っているだけ.しかし 「3 - 5 」の計算をすると,正整数の世界には閉じない. 「3 - 5 」の計算結果は SUBL でも SUBA でも同じ値になる. 但しフラグレジスタ値は異なる → どう異なるか答えられない 人は,簡単なプログラムでやってみよ!
12
符号つきの 加算・減算 PRG0302 ①
② ③
教科書 p.71
④ ⑤ ⑥ ⑦ ⑧ ⑨
原因を考えて みよう
*: オーバーフロー発生
PRG0302 START LAD LAD LAD LAD ADDA ADDL LAD LAD ADDA ADDL LD LD SUBA SUBL RET END
GR1,10 GR2,10 GR3,-10 GR4,65526 GR1,GR3 GR2,GR4 ; * GR1,1 GR2,1 GR1,=32767 ; * GR2,=32767 GR1,=100 GR2,=100 GR1,=103 GR2,=103 ; *
18
練習問題3-1
ファイル名 work33.cas~ work37.cas
教科書104ページの問題1の設問①~⑤を実行するプロ グラムPRG0303, PRG0304, PRG0305, PRG0306, PRG0307 をCaslBuilderを用いて記述した後,アセンブル・リンク・実行 し,結果が正しく求まっていることを確認せよ。 問題1: GR1に30,GR2に7,GR3に-12,GR4に27を設定し, 次の加減算を行うプログラムを作成しなさい。 ① GR1+GR2(結果:37) , ② GR1-GR2(結果:23) , ③ GR3+GR4(結果:15) , ④ GR3-GR4(結果:-39) , ⑤ GR1+GR2-GR3+GR4+100 (結果:176)
OF 上記の範囲に収まらなくなった時,1にセットされる
SF
ZF
符号ビット(第15ビット)の値がセットされる
演算結果がゼロのとき,1にセットされる
10
フラグレジスタ FR
実はアンダーフローの時もOFがセットされる
11
本スライド8
作業3-3
ファイル名 work31.cas
上記のPRG0301をCaslBuilderを用いて記述した 後,ビルドし,デバッガによるトレース実行(F7)に よって,命令①~⑦の実行後に汎用レジスタ(GR1 ~ GR4)の内容がどう変わるかを調べよ。 (解答は「第3回確認クイズ」の用紙に)
ቤተ መጻሕፍቲ ባይዱ
※ 実行が中断した時の色付けされた命令は“次に実行される命令”を示す
5
作業3-1(つづき)
(4) ラベル“LOOP”の場所で一時停止しているときに, “実行-ブレークポイン トの設定/解除”に入って,ラベル“LOOP”に対応するアドレスの値 (#0104)をクリックして選択したうえで,右にある“有効/無効”ボタンを1回 クリックして,このブレークポイントを“無効”にする。 (5) 上記の状態で,“実行-実行(GO)”(F5)により,プログラムの実行を再開 すると,ラベル“LOOP”の場所では一時停止せず,もうひとつのブレークポ イントである“ST命令”まで連続実行し,ここで一時停止することを確認する。 この時点で再度,F5 を押すと,プログラムは最後まで実行する。 (6) 再度,デバッガを起動(F4)し,“実行-ウォッチ式の追加”の中で“追加”ボ タンを押し,ラベル“ANS”で示される主記憶の場所をウォッチ式として設定 する。ここを抜けると,“ウォッチペイン(デバッグウィンドウの右下)” にラベ ル“ANS”が追加され,その内容(0000)が表示されていることを確認する。 (7) 上記(5)の時点でのブレークポイントの状態(“LOOP”は無効,“ST命令”は 有効)で,“実行-実行(GO)”(F5)により,“ST命令”の場所で一時停止す ることを確認し,この時, F7 により“ST命令”を1命令実行すると,“ウォッチ ペイン”にあるラベル“ANS”の値が #0037 に変わることを確認する。もう1 6 回,F7 を押すと,“RET命令”を実行して,プログラムは終了する。
相关文档
最新文档