汇编语言学习笔记 下载本文

call和ret配合实现子程序机制

具有子程序的源程序框架: assume cs:code code segment main: : :call sub1 :mov ax,4c00h int 21h sub1: : call sub2

ret

sub 2: : ret code ends end main

:::mul指令

mul指令:两操作数指令 功能:完成两个数的相乘 格式:mul reg/mem

两个数要么都是8位,要么都是16位

若为8位,则一个默认在al中,另一个可以在一个8位寄存器中,也可以是一个字节单元,结果默认放在ax中

若为16位,一个默认放在ax中,另一个在一个16位寄存器中或一个字单元中,结果高位默认放在dx中,低位放在ax中

第十一章 标志寄存器

标志寄存器的作用:

1) 存储相关指令的某些执行结果; 2) 为CPU执行相关指令提供行为依据; 3) 控制CPU的相关工作方式

标志寄存器的结构

标志寄存器(简称flag)的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何意义. ZF标志

flag的第六位是ZF,零标志位.记录相关指令执行后,结果是否为0,若结果为0,ZF=1,否则ZF=0. PF标志

flag的第二位是PF,奇偶标志位.它记录相关指令执行后,结果的所有二进制位中1的个数是否为偶数,是则PF=1,否则PF=0.

SF标志

flag的第七位是SF,符号标志位.它记录相关指令执行后,结果是否为负,若结果为负,则SF=1,否则SF=0.

SF标志,就是CPU对有符号数运算结果的一种记录,它记录数据的正负,若将数据当作有符号数来运算,可以通过它来得知结果的正负,若将数据当作无符号数来运算,SF的值没有意义。 例如:mov al,10000001B add al,1

执行后,SF=1表示:若进行的是有符号数运算,则结果为负 CF标志

flag的第0位是CF,进位标志位.一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值.

当两个数据相加的时候,有可能产生从最高有效位向更高位的进位.比如: 两个8位数据: 98H+98H

当两个数据相减时,有可能向更高位借位.比如:

两个8位数据:97H-98H,将产生借位,相当于计算197H-98H.