codeseg ends end main
10.8 按动键盘上的光标控制键,在屏幕上下左右任一方向上绘图,每画一点之前,由数字键0~3指定该点的
颜色值,按动ESC键,绘图结束,返回DOS。 答:程序如下:
;DRAW—Program to draw on screen with sursor arrows ;For 640*350 color mode up
equ 48h equ 50h equ 4bh equ 4dh equ 1bh segment proc far
assume cs:codeseg
;clear screen by scrolling it, using ROM call start:
mov ah, 06h mov al, 00h mov cx, 00h mov dl, 79 mov dh, 24 int 10h
;screen pointer will be in CX,DX registers;row number (0 to 350d) in DX ;coumn number (0 to 640d) in CX
mov ah, 00h mov al, 10h int 10h mov ah, 0bh mov bh, 00h mov bl, 01h int 10h mov ah, 0bh mov bh, 01h mov bl, 00h int 10h mov dx, 175 mov cx, 320
;get character from keyboard get_char: mov ah, 0
int 16h cmp al, escape jz jg
;向上键的扫描值 ;向下键的扫描值 ;向左键的扫描值 ;向右键的扫描值 ;“Esc” character
down left right escape codeseg main
;选择显示方式10h(16色图形)
;背景设为蓝色
;设置调色板0# ;设在屏幕中心
;键盘输入
exit
;>‘3’吗?
plot
26
cmp al, 33h
cmp al,30h jl
plot mov bl, al and bl, 03 jmp get_char
;<‘0’吗?
;是‘0’~‘3’,设置颜色
;figure out which way to go, and draw new line plot:
mov al, ah cmp al, up jnz not_up dec dx
not_up:
cmp al, down jnz not_down inc dx
not_down: cmp al, right
jnz not_right inc cx
not_ right: cmp al, left
jnz write dec cx
;use ROM routine to write dot,reguires row# in DX,col in CX,color in AL write:
mov al, bl mov ah, 0ch int 10h jmp get_char
exit: main codeseg
int 20h endp ends end start
第四部分 指令系统复习指导
预备知识:符号含意、数据传送原则
指令中符号说明:opr(操作数)、src(源操作数)、dst(目的操作数)、mem(存储器)、imm(立即数)、seg(段寄存器)、reg(通用寄存器)、EA(偏移地址)、PA(物理地址)
数据传送原则 口诀 数据传送原则 寄段储间互传数, seg、reg、mem之间的数据可以相互传送。 立即只入寄和储。 im可入reg、mem,但不可传送至seg 只有寄间互换数, reg之间的数据可以传送。Mem间、seg间不可自传 CS立即不可目, CS和立即数不可入,不能当目的操作数 8088指令系统 8088指令系统分六大类 一、数据传送指令
27
二、算术运算指令 三、逻辑运算与位移指令 四、串操作指令 五、控制与转移指令 六、CPU控制指令
学习指令注意:(1)操作数的个数,以及每个操作数允许的寻址方式;
(2)要特别注意带有隐含操作数的指令,比如乘法、除法、串传送等; (3)运算类指令要注意运算结果对标志寄存器的影响。
一、数据传送指令
1.通用传送指令
(1)传送指令 MOV dst, src 功能:dst←src (2)堆栈操作指令
PUSH src 作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用: dst←((SP+1)+SP) SP←SP-2 dst(reg seg mem) (3)交换指令XCHG OPR1,OPR2 OPR1←→OPR2
2.累加器传送指令
(1)输入输出指令 输入:IN,输出:OUT
输入指令:直接寻址 IN AX,PORT IN AL,PORT
间接寻址 IN AX,DX IN AL,DX
PORT为8位口地址,例如:IN AL,21H,输出是一样的结构
3.地址传送指令
(1)有效地址传送寄存器
LEA reg16, mem作用:mem的EA→reg16
二、算术运算指令
1.加法类指令(Add)opr-reg mem B/W
(1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC
(2)带进位加法 ADC dst, src dst←dst+src+CF 影响OSZAPC (3)加1指令 INC opr opr←opr+1 影响OSZP
2 . 减法类指令(substract)
(1)减法指令 SUB dst, src ;dst←dst-src 影响标志位OSZAPC
(2)带借位减法指令SBB dst, src ;dst←dst-src-CF 影响标志位OSZAPC (3)减1指令 DEC src 影响OSZP
(5)比较指令 CMP dst, src 和SUB一样,但是不保存结果,只修改标志位
3.乘法类指令multiplication
(1)无符号数乘法MUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC (2)有符号数乘法IMUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC
4.除法类指令(Division)
28
(1)无符号数除法 DIV src ; AX÷src8商进AL,余数进AH;(DX:AX)÷src16商进AX,余数进DX,不影响F。
(2)有符号数除法 IDIV src ;算法同上。
注意:1不影响F;2余数的符号与被除数相同,3若被除数和除数都是8位,被除数需扩展成16位;若被除数和除数都是16位,被除数需扩展成32位。
三、逻辑运算与位移指令
1.逻辑运算
(1)与 AND dst, src ;dst←dst AND src 影响F: SZP (2)或 OR dst, src ;dst←dst OR src 影响F: SZP (3)异或 XOR dst, src ;dst←dst XOR src 影响F: SZP (4)非 NOT opr ;dst←opr逐位求反 不影响F
(5)测试 TEST reg, src ;dst AND src 影响F: SZP 不入dst 逻辑运算dst src opr符合基本传输原则(不允许seg)
2.移位 (注意只能移1位或者CL位,其它不可以)
(1)逻辑左移 SHL opr, 1 或SHL opr, CL 0填最右位 (2)逻辑右移 SHR opr, 1 或SHR opr, CL 0填最左位 (3)算术左移 SAL opr, 1 或SAL opr, CL 0填最右位 (4)算术右移 SAR opr, 1SAR opr, CL 最左位不变 注意:opr: reg mem
3.循环移位
(1)无进位左循环 ROL opr, 1 ROL opr, CL (2)无进位右循环 ROR opr, 1 ROR opr, CL (3)有进位左循环 RCL opr, 1 RCL opr, CL (4)有进位右循环 RCR opr, 1 RCR opr, CL 注意:opr: reg mem B/W
四、串操作和重复指令(唯一的src dst 可以均为mem的指令)
特点:
A源操作数src在DS:SI,目的操作数在dst ES:DI B修改指针决定于DF,0增1减,字节1字2 C串长置于CX D重复靠REP
1.串操作指令
(1)串传送 MOVS / MOVSB / MOVSW dst, src ;dst←src (2)串比较 CMPS / CMPSB / CMPSW dst, src ;dst-src 影响F: OSZAPC
(3)串搜索 SCAS / SCASB / SCASW dst ;AL-dst或AX-dst
29
影响F: OSZAPC
2.重复指令
(1)REP 与MOVS/B/W,STOS/B/W联用
①若CX≠0则重复,执行下一条,否则退出串操作 ②CX←(CX-1)③执行字符串命令 ④重复1~3 (2)RETZ / REPE 与CMPS/B/W,SCAS/B/W联用
①若CX≠0且ZF=1则重复,执行下一条,若CX=0或ZF=0(两数不等)退出串操作
②CX←(CX-1)③执行字符串命令 ④重复1~3 (3)REPNZ / REPNE 与CMPS/B/W,SCAS/B/W联用
①若CX≠0且ZF=0则重复,执行下一条,若CX=0或ZF=1(两数不等)退出串操作
②CX←(CX-1)③执行字符串命令 ④重复1~3
五、控制与转移指令
1.无条件转移指令
(1)段内直接短转移 JMP SHORT 偏移量8 ;IP←IP+8位偏移量
2.条件转移指令(共19条)
特点:双字节指令,短转移。转移范围-128~127 ,IP←opr opr: reg mem,通常为标号
(1) 以标志位为条件(F: OSZPC 十种情况)注意总结规律 ①JO opr ;OF=1转移,溢出转移, ②JNO opr ;OF=0转移,不溢出转移 ③JS opr ;SF=1转移,负数转移 ④JNS opr ;SF=0转移,正数转移
⑤JZ opr ;ZF=1转移,结果为0转移 又JE ⑥JNZ opr ;ZF=0转移,结果不为0转移 又JNE ⑦JP opr ;PF=1转移,偶数转移 ⑧JNP opr ;PF=0转移,奇数转移
⑨JC opr ;CF=1转移,有进(借)位转移 又JB JNA ⑩JNC opr ;CF=0转移,无进(借)位转移 又JA JNB
(2)无符号数比较 大于用A,小于用B,等于用E,四种情况:>≥<≤ 设参与比较的两数按序为M、N
JA opr ;M>N转移到地址opr CF=0且ZF=0 JAE opr ;M≥N转移到地址opr CF=0或ZF=1 JB opr ;M<N转移到地址opr CF=1且ZF=0 JBE opr ;M≤N转移到地址opr CF=1或ZF=1
30
(3)有符号数比较 大于用G,小于用L,等于用E,四种情况:>≥<≤ 设参与比较的两数按序为M、N
JG opr ;M>N转移到地址opr SF⊕OF=0且ZF=0 JGE opr ;M≥N转移到地址opr SF⊕OF=0或ZF=1 JL opr ;M<N转移到地址opr SF⊕OF=1且ZF=0 JLE opr ;M≤N转移到地址opr SF⊕OF=1或ZF=1 (4)根据CX值转移 JCXZ opr ;当CX=0转移到地址opr
3.循环控制指令 以CX为计数器,短转移,不影响F, IP←Label或 IP←IP+扩展的opr8 Label通常为符号地址 (1)循环指令 LOOP SHORT Label
①CX-1 ②若CX≠0,则循环,改变IP ③若CX=0执行下一条指令 零循环指令 LOOPZ SHORT Label 或LOOPE SHORT Label
① CX-1 ②若CX≠0且ZF=1,则循环,改变IP ③若CX=0或ZF=1执行下一条指令
(2)非零循环指令 LOOPNZ SHORT Label 或LOOPNE SHORT Label
①CX-1 ②若CX≠0且ZF=0,则循环,改变IP ③若CX=0或ZF=0执行下一条指令
4.子程序调用指令
子程序=过程 调用=转子 返回=返子
(1)段内直接调用CALL dst ;dst为子程序入口地址(D16范围) ①现IP入栈:SP←(SP-2) (SP+1)SP←IP ②子程序入口地址入IP:IP←dst
5.子程序返回指令
(1)段内返回指令 RET ;与CALL dst成对出现 ①原IP出栈:IP←(SP+1)SP ②修改SP指针:SP←(SP+2)
六、CPU控制指令
1.状态标志位操作指令 D置位复位,I置位复位,C反置位复位 STD ;使DF=1 CLD ;使DF=0 STI ;使IF=1 CLI ;使IF=0
STC ;使CF=1 CLC ;使CF=0 CMC ;CF=CF的非
2.NOP ;空操作
31
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库有答案 14-15-1 汇编语言复习资料(6)在线全文阅读。
相关推荐: