IBM-PC汇编语言程序设计(596)

合集下载

IBM-PC汇编语言程序设计课后习题答案

IBM-PC汇编语言程序设计课后习题答案

第五章试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗JA STOPSUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可MOV DL, AL ;显示一个字符的DOS调用MOV AH, 2INT 21HJMP BEGINSTOP: RET编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗DEC AL ;得到前导字符MOV DL, AL ;准备显示三个字符MOV CX, 3DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用INT 21HINC DLLOOP DISPLAYSTOP: RET将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。

答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP ()DSEG ENDS┇BEGIN: MOV CL, 4 ;右移四次MOV CH, 4 ;循环四次LEA BX, STOREA10: MOV DX, AXAND DX, 0FH ;取AX的低四位MOV [BX], DL ;低四位存入STORE中INC BXSHR AX, CL ;右移四次JNZ A10 ;循环四次完了码B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。

IBM-PC汇编语言程序设计课后习题解答

IBM-PC汇编语言程序设计课后习题解答

附录:《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

IBMPC汇编语言程序设计试题及答案

IBMPC汇编语言程序设计试题及答案

一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均无分。

1.下面的数值表示中,与127相等的是哪一个(D)(A)11111111B (B)127H(C)80H (D)7FH2.如果(AL)=35H,执行AND AL,0FFH指令后,CF=(A)(A)0 (B)1(C)2 (D)与执行AND AL,0指令前的取值保持一致3.如果(SP)=30H,执行PUSH BX指令后,(SP)=(B)(A)28H (B)2EH(C)32H (D)31H4.如果(AL)=01111111B,执行INC AL指令后,CF=(D)(A)1 (B)0(C)2 (D)与执行INC AL指令之前的取值保持一致5.LOOP指令隐含使用并用作循环记数器的是哪一个寄存器(A)(A)CX (B)BX (C)AL D)SI 6.在DEBUG中,T命令的功能是(C)(A)观察某内存单元的当前内容(B)连续运行被调试的程序(C)单步执行下一条指令(D)修改指定寄存器的内容7.如果当前(BL)=57H,执行指令ADD BL,0F0H后,OF标志位的取值为(B)(A)1 (B)0(C)不确定(D)及执行该指令前的取值保持一致(注:若两个操作数的符号相同,而结果的符号及之相反时OF=1,其他情况OF=0)8.如果(AL)=01100011B,(AH)=00100010B,执行ADD AL,AH指令后,正确的结果为(B )(A)(AL)=01100011B,CF=0(B)(AL)=10000101B,CF=0(C)(AL)=00100101B,CF=1(D)(AL)=10000101B,CF=19.条件转移指令的最大转移范围为(B)(A)没有转移范围的限制(B)-128到127个字节(C)-32768到32767个字节(D)0到255个字节10.如果(AL)=0DH,执行SUB AL,80H 指令后,正确的结果为哪一个(A)(A)(AL)=8DH,OF=1 (B)(AL)=0DH,OF=0(C)(AL)=8DH,OF=0 (D)(AL)=0D1H,OF=1(注:若减数大及被减数,此时有借位,CF=1;否则CF=0;若减数及被减数的符号相反,而结果的符号及减数相同,则OF=1;否则OF=0。

IBM-PC汇编语言程序设计实验报告

IBM-PC汇编语言程序设计实验报告

中南大学IBM-PC汇编语言程序设计实验报告学生姓名学院专业班级完成时间目录汇编语言实验一 (3)1.实验目的与要求 (3)2.实验内容与实现原理 (3)3.实验具体设计实现及结果 (4)4.源代码 (7)汇编语言实验二 (8)1.实验目的与要求 (8)2.实验内容与实现原理 (8)3.实验具体设计实现及结果 (9)4.源代码 (9)汇编语言实验三求Fibonacci递归数 (11)1.实验目的与要求 (11)2.实验内容与实现原理 (12)3.实验具体设计实现及结果 (12)4.源代码 (12)汇编语言实验四分类统计字符个数 (17)1.实验目的与要求 (17)2.实验内容与实现原理 (17)3.实验具体设计实现及结果 (18)4.源代码 (18)总结 (21)IBM-PC汇编语言程序设计汇编语言实验一1.实验目的与要求【实验目的】学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,熟悉DEBUG调试程序和DOS功能表的查看,为后续实验打下坚实基础。

【实验要求】通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。

3、ASCII码及用16进制数表示二进制码的方法。

4、8086寄存器: AX,BX,CX,DX,F,IP。

2.实验内容与实现原理DEBUG 命令:1、打DEBUG 进入DEBUG,显示提示苻'_ '。

2、退出DEBUG命令:Q3、显示内存命令:D 起始地址结束地址4、修改内存命令:E 起始地址,连续修改打空格键。

打回车键退出E命令。

5、检查寄存器命令:R6、修改寄存器命令:R 寄存器名7、小汇编命令:A 起始地址,不输入指令打回车键退出A命令。

8、反汇编命令:U 起始地址结束地址9、文件命名命令:N 盘号:文件名10、读文件命令:L 内存地址11、写文件命令:W 内存地址12、读扇区命令:L 内存地址盘号(0--A:,1--B:) 扇区号扇区数13、写扇区命令:W 内存地址盘号扇区号扇区数14、运行命令:G=起始地址结束(断点)地址15、单步命令:T=起始地址运行指令数,进入子程序内部。

[计算机]IBM-PC汇编语言程序设计

[计算机]IBM-PC汇编语言程序设计
sub2 sub3
sub3
PROC 、、 RET ENDP
PROC 、、 RET ENDP
注意返回DOS语句位置
code ENDS END begin
h
9
5.1 循环程序设计
5.1.1 循环程序的结构形式
开始
初始化
循环的初始状态
循环体
循环的工作部分及修改部分
控制条件
计数控制 特征值控制 地址边界控制
ADD AL, 30H ;转变为数字的ASCII
CMP AL, 3aH ;大于3aH, 则应转变
JL print
;为数字0~9的ASCII
ADD AL, 07H ;为字母A~F的ASCII
print: MOV DL,AL ;送 ASCII字符到DL
MOV AH, 2 ;显示DL中的字符
INT 21H
datarea ends
mov cx,0 mov bx,addre mov ax,bx again: test ax,0ffffh jz exit jns shift inc cx shift: shl ax,1 jmp again exit: mov count,cx ret
h
16
例5.4 将正数n插入一个已整序的字数组的正确位置。
循环体 循环条件判断? N
Y
直到型循环 (直到条件成立退出循环)
h
6
分支结构形式
Y N
两个分支
、、、 CMP AL, BL JG great
AL≤BL处理
JMP exit great: AL>BL处理 exit: 、、、
、、、
h
7
N Y
Y
三个分支
分支结构形式

《IBM-PC汇编语言程序设计》教案及答案(第二版)

《IBM-PC汇编语言程序设计》教案及答案(第二版)

《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:20XX年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。

它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。

附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,20XX年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (6)1.1进位计数制与不同基数的数之间的转换 (6)1.2二进制数和十六进制数的运算 (8)1.3计算机中数和字符的表示 (8)1.4几种基本的逻辑运算 (9)第 2 章80X86计算机组织 (10)2.180X86微处理器 (10)2.2基于微处理器的计算机系统构成 (11)2.3中央处理机 (11)2.4存储器 (13)2.5外部设备 (15)第 3 章80X86的指令系统和寻址方式 (16)3.180X86的寻址方式 (16)3.2程序占有的空间和执行时间 (18)3.380X86的指令系统 (19)第 4 章汇编语言程序格式 (41)4.1汇编程序功能 (41)4.2伪操作 (41)4.3汇编语言程序格式 (46)4.4汇编语言程序的上机过程 (50)第 5 章循环与分支程序设计 (53)5.1循环程序设计 (53)5.2分支程序设计 (54)5.3如何在实模式下发挥80386及其后继机型的优势 (54)第 6 章子程序结构 (56)6.1子程序的设计方法 (56)6.2子程序的嵌套 (58)6.3子程序举例 (58)第7 章高级汇编语言技术 (59)7.1宏汇编 (59)7.2重复汇编 (60)7.3条件汇编 (61)第8 章输入/输出程序设计 (63)8.1I/O设备的数据传送方式 (63)8.2程序直接控制I/O方式 (64)8.3中断传送方式 (64)第9 章BIOS和DOS中断 (68)9.1键盘I/O (69)9.2显示器I/O (71)9.3打印机I/O (72)9.4串行通信口I/O (73)第10 章图形与发声系统的程序设计 (75)10.1显示方式 (75)10.2视频显示存储器 (75)10.3EGA/VGA图形程序设计 (76)10.4通用发声程序 (77)10.5乐曲程序 (79)第11 章磁盘文件存取技术 (80)11.1磁盘的记录方式 (80)11.2文件代号式磁盘存取 (82)11.3字符设备的文件代号式I/O (83)11.4BIOS磁盘存取功能 (83)附录:《IBM—PC汇编语言程序设计》习题参考答案 (85)第一章.习题 (85)第二章.习题 (86)第三章.习题 (88)第四章.习题 (106)第五章.习题 (113)第六章.习题 (136)第七章.习题 (153)第八章.习题 (161)第九章.习题 (168)第十章.习题 (172)第十一章.习题 (186)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

IBMPC汇编语言程序设计

IBMPC汇编语言程序设计

IBMPC汇编语言程序设计IBM PC 汇编语言程序设计(第一章 8086/8088指令系统)第一章 8086/8088指令系统一、数据传送指令 .MOV指令格式为: MOV DST,SRC执行的操作:(DST)<-(SRC).PUSH进栈指令格式为:PUSH SRC执行的操作:(SP)<-(SP)-2 ?((SP)+1,(SP))<-(SRC).POP出栈指令格式为:POP DST执行的操作:(DST)<-((SP+1),(SP))(SP)<-(SP)+2 .XCHG 交换指令格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) .IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. 格式为: XLAT OPR 或: XLAT执行的操作:(AL)<-((BX)+(AL)) LEA(Load effective address)有效地址送寄存器 LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中. .LDS 指针送寄存器和DS指令格式为: LDS REG,SRC执行的操作:(REG)<-(SRC)(DS)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器..LES 指针送寄存器和ES指令格式为: LES REG,SRC执行的操作: (REG)<-(SRC)(ES)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH送标志寄存器 PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)<-(PWS的低字节).SAHF AH送标志寄存器格式为: SAHF执行的操作:(PWS的低字节)<-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW).POPF 标志出栈格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP))(SP)<-(SP+2)二、算术指令 .ADD 加法指令格式: ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST) .ADC 带进位加法指令格式: ADC DST,SRC 执行的操作:(DST)<-(SRC)+(DST)+CF .ADD 加1指令格式: INC OPR执行的操作:(OPR)<-(OPR)+1 .SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC) .SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CF .DEC 减1指令格式: DEC OPR执行的操作:(OPR)<-(OPR)-1 .NEG 求补指令格式: NEG OPR执行的操作:(OPR)<- -(OPR) .CMP 比较指令格式: CMP OPR1,OPR2 执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球..MUL 无符号数乘法指令格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC) .IMUL 带符号数乘法指令格式: IMUL SRC执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数. .DIV 无符号数除法指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数.IDIV 带符号数除法指令格式: DIV SRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同..CBW 字节转换为字指令格式: CBW执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD 字转换为双字指令格式: CWD执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.三、逻辑指令 .AND 逻辑与指令格式: AND DST,SRC 执行的操作:(DST)<-(DST)^(SRC) .OR 逻辑或指令格式: OR DST,SRC 执行的操作:(DST)<-(DST)V(SRC) .NOT 逻辑非指令格式: NOT OPR执行的操作:(OPR)<- (OPR) .XOR 异或指令格式: XOR DST,SRC执行的操作:(DST)<-(DST) V (SRC).TEST 测试指令格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移格式: SHL OPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.串处理指令四、串处理指令1.与REP相配合工作的MOVS,STOS和LODS指令 .REP重复串操作直到(CX)=0为上格式: REP string primitive 其中String Primitive可为MOVS,LODS或STOS 指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3).MOVS 串传送指令格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码..CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量; .STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量. .STOS 存入串指令格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2 该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中. .LODS 从串取指令格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2 该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令 .REPE/REPZ 当相等/为零时重复串操作格式: REPE(或REPZ) String Primitive 其中String Primitive可为CMPS或SCAS指令.执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3).REPNE/REPNZ 当不相等/不为零时重复串操作格式: REPNE(或REPNZ) String Primitive 其中String Primitive可为CMPS 或SCAS指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同. .CMPS 串比较指令格式: CMP SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2 指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果, 只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同. .SCAS 串扫描指令格式: SCAS DSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2 该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同.五、控制转移指令1.无条件转移指令.JMP(jmp) 跳转指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8位位移量2)段内直接近转移格式:JMP NEAR PTR OPR 执行的操作:(IP)<-(IP)+16位位移量3)段内间接转移格式:JMP WORD PTR OPR 执行的操作:(IP)<-(EA) 4)段间直接(远)转移格式:JMP FAR PTR OPR 执行的操作:(IP)<-OPR的段内偏移地址(CS)<-OPR所在段的段地址 5)段间间接转移格式:JMP DWORD PTR OPR 执行的操作:(IP)<-(EA)(CS)<-(EA+2) 2.条件转移指令1)根据单个条件标志的设置情况转移 .JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0.JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1.JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0.JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1.JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移格式: JP OPR测试条件:PF=1.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移格式: JNP(或JPO) OPR测试条件:PF=0.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移.JB(或JNAE,JC)格式:同上.JNB(或JAE,JNC)格式:同上.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SF V OF=1.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SF V OF=0.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SF V OF)VZF=1.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SF V OF)VZF=04)测试CX的值为0则转移指令.JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8位短跳!3.循环指令.LOOP 循环指令格式: LOOP OPR测试条件:(CX)<>0.LOOPZ/LOOPE 当为零或相等时循环指令格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0且ZF=1.LOOPNZ/LOOPNE 当不为零或不相等时循环指令格式: LOOPNZ(或LOOPNE) OPR 测试条件:(CX)<>0且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充.4.子程序.CALL调用指令.RET返回指令5.中断.INT指令格式: INT TYPE或 INT执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4)(CS)<-(TYPE*4+2) .INTO 若溢出则中断执行的操作:若OF=1则:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(10H)(CS)<-(12H).IRET 从中断返回指令格式: IRET执行的操作:(IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理机控制指令1.标志处理指令.CLC进位位置0指令(Clear carry)CF<-0 .CMC进位位求反指令(Complement carry)CF<- CF .STC进位位置1指令(Set carry)CF<-1 .CLD方向标志置0指令(Clear direction)DF<-0 .STD方向标志置1指令(Set direction)DF<-1 .CLI中断标志置0指令(Clear interrupt)IF<-0 .STI中断标志置1指令(Set interrupt)IF<-0 2.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁这些指令可以控制处理机状态.这们都不影响条件码..NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代..HLT停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序..WAIT等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续德行..ESC换码指令格式ESC mem其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去.当然ESC指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件..LOCK封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU与其他处理机协同工作时,该指令可避免破坏有用信息.第二章伪操作汇编语言程序语句除指令以外还可以由伪操作和宏指令组成.伪操作又称伪指令,它不像机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,这们可以完成如数据定义、分配存储区、指示程序结束等功能。

IBM-PC汇编语言程序设计答案

IBM-PC汇编语言程序设计答案

第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

《IBM-PC汇编语言程序设计》答案(第二版)

《IBM-PC汇编语言程序设计》答案(第二版)

(9) 物理地址 (F)
I.把若干个模块连接起来成为可执行文件的系统程序。
(10) 汇编语言 (H)
J.保存各逻辑段的起始地址的寄存器,8086/8088 机有四个:CS、DS、
SS、ES。
(11) 机器语言 (G)
K.控制操作的标志,如 DF 位。
(12) 汇编程序 (E)
L.记录指令操作结果的标志,共 6 位:OF、SF、ZF、AF、PF、CF。
31FF0
数据寄存器等 CX
41FF0
代码段
AX、DX,乘数和除数用其他寄 2.6 题的存储器分段示意图
存器或存储器
(4) 保存段地址
段寄存器
(5) 表示运算结果为 0
ZF=1
(6) 将要执行的指令地址
CS:IP
(7) 将要从堆栈取出数据的地址 SS:SP
答:答案见题目的右边。
2.8 那些寄存器可以用来指示存储器地址? 答:BX、BP、SI、DI、堆栈操作时的 SP、对应的段地址、386 及其后继机型的 Exx。
(4) 32767=111 1111 1111 1111B=7FFFH
(4) 32767
1.2 将下列二进制数转换为十六进制数和十进制数:
(1) 10 1101
(2) 1000 0000
(3) 1111 1111 1111 1111 (4) 1111 1111
答:(1) 10 1101B=2DH=45
(2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255
1.3 将下列十六进制数转换为二进制数和十进制数:
(1) FA

IBM-PC汇编语言程序设计答案(第2版)

IBM-PC汇编语言程序设计答案(第2版)

附录:《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

IBM-PC汇编语言程序设计实验报告

IBM-PC汇编语言程序设计实验报告

目录实验1 利用DEBUG调试汇编语言程序段 (1)实验2 初级程序的编写与调试实验(一) (5)实验3 初级程序的编写与调试实验(二) (14)实验4 汇编语言程序上机过程 (19)实验5 分支程序实验 (22)实验6 循环程序实验 (26)实验7 子程序实验 (30)实验1 利用DEBUG调试汇编语言程序段一.实验目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。

二.实验环境PC微机DOS操作系统、Windows操作系统三.实验内容1.进入和退出DEBUG程序;1)开始—运行,输入cmd,点确定进入命令窗口2)在命令窗口中输入dubug进入debug程序3)进入debug窗口后,输入q命令退出debug2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)-D100 ;显示DS段, 0100开始的128个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H)-D DS:100 ;显示DS段, 0100H开始的128个字节内容-D CS:200 ;显示CS段, 0200H开始的128个字节内容-D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容-D 200 ;显示DS段, 0200H开始的128个字节内容-D 100 L 10 ;显示DS段, 100H开始的100H个字节内容2)E命令(修改指定内存)-E DS:100 F3 ‘AB’ 8D ; 把DS段中0100H开始的四个字节修改为F3 ‘AB’(A和B的ASCII 码) 8D也可以按下面的方式实现3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。

)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al单步执行上述指令6)G命令等的使用(执行A命中输入的汇编指令)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al int 3然后使用g命令执行上面的例子设断点在100H处然后用T命令单步执行实验2 初级程序的编写与调试实验(一)一.实验目的1.进一步熟悉DEBUG命令;2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;3.熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;4.掌握简单的汇编语言程序编写与调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档