资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章 循环和分支结构程序设计* *1 1第五章 循环和分支结构程序设计5.1转移指令l1、无条件转移指令 (1)段内直接短转移:JMP SHORT 标号l执行操作:(IP) (IP) + 8位位移量 (2)段内直接近转移:JMP NEAR 标号l执行操作:(IP) (IP) + 16位位移量 (3)段内间接转移:JMP WORD PTR OPRl执行操作: (IP) (EA) (4)段间直接远转移:JMP 标号l执行操作:(IP) OPR 的段内偏移地址l(CS) OPR 所在段的段地址 (5)段间间接转移: JMP DWORD PTR OPRl执行操作: (IP) (EA)l(CS) (EA+2)DateDate2 2第五章 循环和分支结构程序设计5.1转移指令l2、条件转移指令:注意:只能使用段内直接寻址 的8 位位移量 (1) 根据单个条件标志的设置情况转移 l格式 测试条件lJZ(JE) label ZF = 1lJNZ(JNE) label ZF = 0lJS label SF = 1lJNS label SF = 0lJO label OF = 1lJNO label OF = 0lJP label PF = 1lJNP label PF = 0lJC label CF = 1lJNC label CF = 0DateDate3 3第五章 循环和分支结构程序设计5.1转移指令l2、条件转移指令:注意:只能使用段内直接 寻址的8 位位移量 (2) 比较两个无符号数,并根据比较结果转移l 格式 测试条件l JB (JNAE,JC) label CF = 1l JNB (JAE,JNC) label CF = 0l JBE (JNA) label CFZF = 1l JNBE (JA) label CFZF = 0DateDate4 4第五章 循环和分支结构程序设计5.1转移指令l2、条件转移指令:注意:只能使用段内直接寻址的8 位位移量 (3) 比较两个带符号数,并根据比较结果转移l格式 测试条件l JL (JNGE) label SFOF = 1l JNL (JGE) label SFOF = 0l JLE (JNG) label (SFOF)ZF = 1l JNLE (JG) label (SFOF)ZF = 0 说明:对于A-B 当没有溢出时,S=1,AB; 当没有溢出时,S=0,A=B; 有溢出时, S=0,A 时转 L1 ,否则转 L2l CMP DX, BXl JG L1l JL L2l CMP AX, CXl JA L1lL2: l lL1: l DateDate1212第五章 循环和分支结构程序设计5.2分支结构程序设计l2、多分支结构程序设计 计算符号函数SGN(X)的值l 1,x0 lY= 0, x=0l -1,xf退出 add_to: mov cl, 4l shl bx, cll mov ah, 0l add bx, axl jmp newchar exit: DateDate3434第五章 循环和分支结构程序设计5.5串操作指令l1、方向标志 CLD 使DF=0 STD 使DF=1DateDate3535第五章 循环和分支结构程序设计5.5串操作指令l2、串操作指令 (1)传送指令MOVSl语句格式: MOVSB字节串传送 MOVSW字串传送l功能:将以SI为指针的源串中的一个字节(或字)存储单 元中的数据传送至以DI为指针的目的地址中去,并自动修 改指针,使之指向下一个字节(或字)存储单元。 即:(DS:SI)ES:DI。 当DF=0时,SI和DI增量。 当DF=1时,SI和DI减量。DateDate3636第五章 循环和分支结构程序设计5.5串操作指令l2、串操作指令CMPS 语句格式:l CMPSB字节串比较l CMPSW字串比较 功能:将SI所指的源串中的一个字节(或字)存储 单元中的数据与DI所指的目的串中的一个字节(或 字)存储单元中的数据相减,并根据相减的结果设 置标志,但结果并不保存。l即:(DS:SI)(ES:DI)。l 修改串指针,使之指向串中的下一个元素。l当DF=0时,SI和DI增量。当DF=1时,SI和DI减量DateDate3737第五章 循环和分支结构程序设计5.5串操作指令l3串搜索指令SCAS 语句格式:l SCASB字节串搜索l SCASW字串搜索 功能:AL(字节)或AX(字)中的内容与DI所指的 目的串中的一个字节(或字)存储单元中的数据相 减,根据相减结果设置标志位,结果不保存,l即: 字节操作:(AL)(ES:DI),字操作:( AX)(ES:DI)。l 修改指针使之指向串中的下一个元素。当DF=0时,DI 增量。当DF=1时,DI减量DateDate3838第五章 循环和分支结构程序设计5.5串操作指令l4、从源串中取数指令LODS 语句格式:l LODSB从字节串中取数l LODSW从字串中取数 功能:将SI所指的源串中的一个字节(或字)存储 单元中的数据取出来送入AL(或AX)中。l即: 字节操作:(SI)AL,字操作:(SI) AX。l 修改指针SI,使它指向串中的下一个元素。l当DF=0时,SI增量。当DF=1时,SI减量。 DateDate3939第五章 循环和分支结构程序设计5.5串操作指令l5、往目的串中存数指令STOS 语句格式:l STOSB往字节串中存数lSTOSW往字串中存数 功能:将AL或AX中的数据送入DI所指的目的串中的 字节(或字)存储单元中。l即: 字节操作:(AL)DI,字操作:(AX) DI。l 修改指针DI,使之指向串中的下一个元素。当DF=0时 ,DI增量。当DF=1时,DI减量。DateDate4040第五章 循环和分支结构程序设计5.5串操作指令l6、重复前缀指令REP REPZ REPNZl(1)REP :REP前缀用在MOVS、STOS 、LODS指令前。 功能:每执行一次串指令(CX)1,直到(CX)=0,重复执 行结束。l(2)REPZ :该指令一般用在CMP、SCAS指令前。 功能:每执行一次串指令(CX)1,并判断ZF标志是否为0, 只要(CX)=0或ZF=0,则重复执行结束。l(3)REPNZ:该指令一般用在CMPS、SCAS 指令前。 功能:每执行一次串指令(CX)1,并判断ZF标志是否为0, 只要(CX)=0或ZF=1,则重复执行结束。DateDate4141第五章 循环和分支结构程序设计5.5串操作指令l7、举例l将mess1中的17个字符COPY到mess2起始的 单元中。DateDate4242程序data segment mess1 db personal_computerdata endsextra segment mess2 db 17 dup (?)extra endscode segmentassume cs:code,ds:data,es:extrastart: mov ax, data mov ds,ax mov ax, extra mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb code endslea si, mess1+16 lea di, mess2+16 mov cx, 17 std rep movsbDateDate4343程序data segment mess1 db personal_computer mess2 db 17 dup (?)data ends code segment assume cs:code,ds:data,es:data start: mov ax, data movds, ax mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb code endsDateDate4444举例例:从一个字符串中查找一个指定的字符l mess db COMPUTERl lea di, messl mov al, Tl mov cx, 8l cldl repne scasb DateDate4545举例例:比较两个字符串,找出它们不相匹配的位置llea si, mess1llea di, mess2lmov cx, 8lcldlrepe cmpsbDateDate4646作业P193 9DateDate4747
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号