汇编语言第八章答案18

合集下载

《汇编语言》(王爽)第8章 数据处理的两个基本问题--笔记

《汇编语言》(王爽)第8章 数据处理的两个基本问题--笔记

正确表示:mov ax,[bp](1)错误表示:mov ax,[ds], mov ax,[cx](2)在内存单元表示的[...]这种形式下,中括号里面只能放bx,si,di,bp 这四个寄存器。

1.bx,si a.bx,di b.bp,si c.bp,di d.正确组合:(1)mov ax,[bx+bp]a.mov ax,[si+di]b.错误表示:(2)在“[...]”里面的寄存器只能是固定的四种组合,其他组合是错误的2.如果在[...]中包含了bp 这个寄存器,那么默认的段寄存器就是ss3.8.1 bx 、si 、di 和bp从机器指令的层面来讲,并不关心数据的数值是多少,而关心在执行指令之前,它将要处理的数据存在在什么位置1.CPU 内部(1)内存(2)端口(3)处理的指令可以存放的位置有三个:2.8.2 机器指令处理的数据在什么地方立即数。

直接在指令中给出,执行指令前一刻,和代码一起存储在CPU 的指令缓存器中(1)eg.mov ax,1寄存器 eg.mov ax,bx(2)段地址(SA )和偏移地址(EA ) eg. mov ax,ds:[3](3)汇编语言中数据存储的位置有三种声明方式:1.8.3 汇编语言中数据位置的表达8.4 寻址方式在之前的笔记已经整理了——>所有的寻址方式8.5 指令要处理的数据有多长mov al,bl (1)mov ax,bx(2)通过寄存器名1.mov word ptr ds:[0],1(1)inc byte [bx](2)通过“X ptr [...]”的格式,其中X 为word 或byte2.pop ax (1)push bx(2)默认或者已经规定(栈操作都是以字为单位)3.汇编语言中通过三种方式声明所处理的是字还是字节8.6 寻址方式的综合应用暂时跳过div reg(寄存器)(1)div 内存单元(2)格式:1.运算规则与涉及到的寄存器2.例:计算10001/1003.由于10001>65535,所以被除数需要用DX 和AX 联合存放。

《汇编语言》第8章

《汇编语言》第8章

DOS是IBM PC机的磁盘操作系统,它由 是 机的磁盘操作系统, 机的磁盘操作系统 软盘或硬盘提供。它有二个模块 软盘或硬盘提供。它有二个模块 它们使BIOS用起来更方便 用起来更方便–– 和,它们使 它们使 用起来更方便 –DOS模块提供了更多更必要的测试 , 使 DOS 模块提供了更多更必要的测试, 模块提供了更多更必要的测试 操作比使用相应功能的BIOS操作更简易而且对 操作更简易而且对 操作比使用相应功能的 硬件的依赖性更少些。 硬件的依赖性更少些。
个单元内容对应屏蔽上的哪个位置。 个单元内容对应屏蔽上的哪个位置。 行号:0~24 列号:0~9
一、属性 单色屏幕上的每个字符在存储器中由二个字 单色屏幕上的每个字符在存储器中由 二个字 节表示、 一个字节保存字符的ASCII码 , 另一个 节表示 、 一个字节保存字符的 码 字节保存字符的属性。字符的属性确定了每个显 字节保存字符的属性。 字符的属性 示字符的特性––––如字符是否闪烁显示,是否被 如字符是否闪烁显示, 示字符的特性 如字符是否闪烁显示 加亮,是否反相显示。 加亮,是否反相显示。
使用BIOS功能调用,给程序员编程带来很 功能调用, 使用 功能调用 大的方便(他不必了解硬件 接口的特性, 大的方便 他不必了解硬件I/O接口的特性 , 可 他不必了解硬件 接口的特性 直接用指令设置参数,然后中断调用BIOS中的 直接用指令设置参数,然后中断调用 中的 程序。 使程序简洁, 程序。–––使程序简洁,可读性好,易于移植 使程序简洁 可读性好,易于移植)
get-ec: mov ah, 7 int 21h cmp al, 38h je op1 cmp al, 3ch je op2 cmp al, 3dh je op3 jmp error ; F3? ; F2? ; F1?

1632位微机原理汇编语言及接口技术第八章课后习题答案

1632位微机原理汇编语言及接口技术第八章课后习题答案

习题8.4中断请求寄存器IRR保存8条外界中断请求信号IR0~IR7的请求状态Di位为1表示IRi引脚有中断请求;为0表示无请求中断服务寄存器ISR保存正在被8259A服务着的中断状态Di位为1表示IRi中断正在服务中;为0表示没有被服务中断屏蔽寄存器IMR保存对中断请求信号IR的屏蔽状态Di位为1表示IRi中断被屏蔽(禁止);为0表示允许习题8.6某时刻8259A的IRR内容是08H,说明IR3引脚有中断请求。

某时刻8259A 的ISR内容是08H,说明IR3正在被中断服务,其它不被处理。

在两片8259A级连的中断电路中,主片的第5级IR5作为从片的中断请求输入,则初始化主、从片时,ICW3的控制字分别是 20H 和 05H 。

习题8.9普通全嵌套方式:8259A的中断优先权顺序固定不变,从高到低依次为IR0、IR1、IR2、……IR7;中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线;在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套。

普通中断结束方式:配合全嵌套优先权方式使用;CPU用输出指令往8259A发出普通中断结束EOI命令;8259A就会复位正在服务的中断中优先权最高的ISR位。

习题8.13int08h proc far ;远过程sti ;开中断,允许中断嵌套push ds ;现场保护push axpush dx…… ;日时钟计时…… ;控制软驱马达int 1ch ;调用指令中断1CHmov al,20h ;发送EOI命令(00100000B,D4D3=00,说明是OCW2)out 20h,alpop ax ;现场恢复pop dxpop dsiret ;中断返回。

汇编语言第八章

汇编语言第八章
5
8.1
Sound
1
1 0
设备控制寄存器( 设备控制寄存器 61h )
ห้องสมุดไป่ตู้
1/0
0
2 控制其它外部设备 与 门

SOUND PROC NEAR PUSH AX PUSH DX MOV DX,CX IN AL,61H AND AL,11111100B TRIG: XOR AL,2 OUT 61H,AL MOV CX,BX
DELAY:LOOP DELAY DEC DX JNE TRIG POP DX POP AX RET SOUND ENDP
6
3. 中断传送方式
什么是中断:中断是一种使 什么是中断:中断是一种使CPU中止正在执行的程序而转去处理特 中止正在执行的程序而转去处理特 殊事件的操作。 殊事件的操作。 什么是中断源: 什么是中断源:引起中断的事件 。 中断的优点:避免因反复查询外部设备的状态而浪费时问, 中断的优点:避免因反复查询外部设备的状态而浪费时问,从而提 高了CPU的效率。 的效率。 高了 的效率 外中断(硬中断) 由外设控制器或协处理器引起的中断。 外中断(硬中断):由外设控制器或协处理器引起的中断。 外设的 I/O 请求 —— 可屏蔽中断 非屏蔽中断NMI 电源掉电 / 奇偶错 —— 非屏蔽中断 内中断(软中断) 中断指令INT产生的中断, 或由 产生的中断, 内中断 ( 软中断 ) : 中断指令 产生的中断 或由CPU的某些错误结 的某些错误结
端口地址PORT是一个 位的立即数, 是一个8位的立即数 直接端口寻址方式 :端口地址 是一个 位的立即数, 其范围是0一 。 其范围是 一255。 端口地址在DX中 其范围为0一 间接寻址方式 :端口地址在 中,其范围为 一65535 。

汇编语言王爽第二版课后答案

汇编语言王爽第二版课后答案

第一章基础知识检测点1.1(第8页)----------------------(1) 13(2) 1024,0,1023(3) 8192,1024(4) 2^30,2^20,2^10(5) 64,1,16,4(6) 1,1,2,2,4(7) 512,256(8) 二进制注意:1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方)第二章寄存器(CPU工作原理)检测点2.1(第18页)----------------------(1)写出每条汇编指令执行后相关寄存器中的值。

第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第十一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第23页)----------------------(1)00010H,1000FH(2)1001H,2000H第2题说明:因为段的起始地址要为16的倍数。

所以当段地址小于1001H或大于2000H时CPU都无法寻到。

检测点2.3(第33页)----------------------答:CPU修改了4次IP的值。

情况如下:第1次:执行完mov ax,bx后第2次:执行完sub ax,ax后第3次:读入jmp ax后第4次:执行完jmp ax后最后IP的值为0实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页)-----------------------------------------------------1.预备知识:Debug的使用<此部分略>2.实验任务(第43页)(1)<此部分略>(2)<此部分略>(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。

汇编语言程序设计课后答案

汇编语言程序设计课后答案

第一章. 习题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) 11111111答:(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=01.6 下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

汇编语言程序设计第8章_80868088分支程序设计.ppt

汇编语言程序设计第8章_80868088分支程序设计.ppt
21.03.2019
114H,128H,256H,259H,325H,14ADH, 34DEH,4D34H,5FDAH 256H ? ? ?
第 1章
汇编语言基础知识 8章
8086/
22
8.2
分支结构程序设计
LEA CMP JA LEA JE STC JMP LAB1: MOV SHL ADD CMP JB JE STC JMP LAB2: MOV MOV MOV DI,ARRAY AX,ES:[DI] LAB1 SI ,ES:[DI] EXIT EXIT1 SI,LEN1-1 SI,1 SI,DI AX,ES:[SI] LAB2 EXIT EXIT1 MOV LOW1,1 BX,LEN1 HIGH1,BX BX,DI
21.03.2019
al, 0
;AL为逻辑尺
continue bx, branch_table al, 1 ;逻辑右移 add1 word ptr[bx] ;段内间接转移 bx, type branch_table ;add bx,2 L
第 1章
汇编语言基础知识 8章
8086/
17
…… cmp je mov L: shr jnc jmp add1: add jmp continue: …… routine1: …… routine2: ……
21.03.2019
第 1章
汇编语言基础知识 8章
8086/
9
8.2 分支结构程序设计 CODE SEGMENT ASSUME DS:DATA,CS:CODE 8.2.1 测试法分支程序设计 START: MOV AX, DATA MOV DS, AX MOV AX, X CMP AX, Y DATA SEGMENT JGE L1 X DW -0ABH MOV AX, Y Y DW 205 L1: CMP AX, Z Z DW 200 JGE EXIT MAX DW ? MOV AX, Z DATA ENDS EXIT: MOV MAX, AX MOV AH, 4CH INT 21H CODE ENDS END START

汇编语言程序设计教程2版8章

汇编语言程序设计教程2版8章
2010-12-24 7
直接存储器存取方式(DMA) 直接存储器存取方式(DMA)
中断传送方式虽然能快速地响应I/O设备的传送 中断传送方式虽然能快速地响应I/O设备的传送 要求,但其服务过程仍由软件来实现。 要求,但其服务过程仍由软件来实现。每次中 断处理需要保护断点、保护现场及恢复现场、 断处理需要保护断点、保护现场及恢复现场、 恢复断点,这些操作都要占用CPU的额外时间 的额外时间。 恢复断点,这些操作都要占用CPU的额外时间。 对某些需要高速地传送大量数据的设备( 对某些需要高速地传送大量数据的设备(如磁 来说,这种中断传送方式就显得太慢。 盘)来说,这种中断传送方式就显得太慢。 因此,希望由硬件电路来直接实现数据交换, 因此,希望由硬件电路来直接实现数据交换, 而不必通过CPU,这就是DMA方式 方式。 而不必通过CPU,这就是DMA方式。 DMA方式能摆脱 DMA方式能摆脱CPU的直接干预,利用硬件控 方式能摆脱CPU的直接干预 的直接干预, 制设备DMA控制器 DMAC), 控制器( ),实现外部设备 制设备DMA控制器(DMAC),实现外部设备 与内存间的直接数据传送。 与内存间的直接数据传送。
2010-1U寻址外设的方式
CPU寻址外设的方式有存储器寻址和端口寻址两 CPU寻址外设的方式有存储器寻址和端口寻址两 种方式。第一种存储器寻址方式是把外设看作一 种方式。第一种存储器寻址方式是把外设看作一 个存储单元, 个存储单元,每个外设占有存储器的一个或若干 个地址。当要从外设输入一个数据时, 个地址。当要从外设输入一个数据时,就对外设 进行读操作,即到外设接口寄存器中读回数据。 进行读操作,即到外设接口寄存器中读回数据。 在向外设输出一个数据时, 在向外设输出一个数据时,则以同样的方式对与 外设对应的存储单元地址进行一次存储器写操作, 外设对应的存储单元地址进行一次存储器写操作, 即把数据写到外设接口的寄存器中去。 即把数据写到外设接口的寄存器中去。 CPU寻址外设的另一种方式是端口寻址 CPU寻址外设的另一种方式是端口寻址,这种方 寻址外设的另一种方式是端口寻址, 式要求使用专门的输入输出指令, 式要求使用专门的输入输出指令,并要求为外设 接口分配地址,以便通过接口地址来寻址外设。 接口分配地址,以便通过接口地址来寻址外设。

《汇编语言》各章习题答案

《汇编语言》各章习题答案

汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。

微机原理、汇编与接口技术习题答案 第8章习题答案

微机原理、汇编与接口技术习题答案 第8章习题答案

微机原理、汇编与接口技术第八章习题答案8.1端口地址为380H~383H 4个A端口基本输入、B端口基本输出的方式控制字为90H,方式控制字寄存器的端口地址为383H。

初始化程序段如下:MOV AL, 90HMOV DX, 383HOUT DX, AL8.2MOV DX, 383HMOV AL, 80H ;3个端口基本输出的方式控制字80HOUT DX, ALMOV AL, 0EH ;PC7置“0”的置位/复位字0EHOUT DX, ALMOV AL, 9 ;PC4置“1”的置位/复位字09HOUT DX, AL8.3stack segment stack 'stack'dw 32 dup(0)stack endsdata segmentBUF DB 0data endscode segmentstart pro farassume ss: stack, cs: code, ds: datapush dssub ax,axpush axMOV ES,AX ;ES为中断向量表的段地址 0000Hmov ax,datamov ds,axMOV DX,383H ;A端口方式1输入MOV AL,0B0HOUT DX,ALMOV AL,9 ;PC4置1,允许A端口中断OUT DX,ALMOV AX,SEG IS8255 ;填写中断向量表MOV ES:01C6H,AXMOV AX,OFFSET IS8255MOV ES:1C4H,AXMOV DX,380H ;A端口的端口地址送DXIN AL,0A1H ;修改中断屏蔽字,允许IQR9中断IND AL,0FDHOUT 0A1H,ALJMP $IN AL,0A1H ;恢复中断屏蔽字,禁止IRQ9中断OR AL,02HOUT 0A1H,ALretIS8255: IN AL,DX ;读键值MOV BUF,AL ;存键值MOV AL,61H ;指定EOI命令OUT 0A0H,ALMOV AL,62HOUT 20H,ALPOP AX ;修改返址INC AXINC AXPUSH AXIRETstart endpcode endsend start8.4控制程序的框图stack segment stack 'stack'dw 32 dup(0)stack endsdata segmentBUF DB 00H, 10H, 10H, 10H ;SEGPT表中位移量为10H处的显示代码为全灭SEGPT DB 40H, 79H, 24H, 30H, 19H, 12H, 2,78HDB 0, 18H, 8, 3, 46H, 21H, 6, 0EH, 7FHKYTBL DB 17H, 27H, 2BH,2DH, 47H, 4BH, 4DH, 87H, 8BHDB 8DH, 8EH, 4EH, 2EH, 1EH, 1DH, 1BHdata endscode segmentstart proc farassume ss: stack, cs: cods, ds: datapush dssub ax, axpush axmov ax, datamov ds, axMOV DX, 383HMOV AL, 81H ;A口基本I/O出、PC H出、PC L入MOV DX, ALMOV DI, 0 ;存键入数的指针DISUP: MOV AH, 88H ;位选值, 从PC H输出, 1位为0, 3位为1 MOV BX, 0DISUP1: MOV CL, BUF [BX] ;取一个显示数XOR AL, ALMOV CH, AL ;将显示数扩展为16位MOV DX, 382HOUT DX, AL ;关显示,七段显示器的共阴极为高电平MOV SI, OFFSET SEGPT ;七段显示代码表的偏移首地址ADD SI, CX ;求得显示数的显示代码的偏移地址MOV AL, [SI] ;取显示代码MOV DX, 380H ;输出显示代码到A口OUT DX, ALMOV AL, AHMOV DX, 382H ;输出显示数位到C口(PC H)OUT DX, ALCALL D1MS ;1ms延时CMP AH, 11H ;是最低数位吗?JE DECKY ;是,转键盘扫描和键译码程序INC BX ;否,指向下一位数的存储地址ROR AH, 1 ;移到下一个数位JMP DISUP1DECKY: MOV AL, 7FHMOV DX, 380HOUT DX, AL ;关显示,七段显示器的七段均为低电平MOV AL, 0F0HMOV DX, 382HOUT DX, AL ;输出,使所有行线为低电平IN AL, DX ;读入键盘列数据AND AL, 0FH ;屏蔽无用位(D7~D4)CMP AL, 0FH ;有键按下吗?JE DISUP ;无键按下,返回显示程序CALL D20MS ;有键按下延时20ms,消除键抖动MOV CX, 4 ;行计数器MOV AH, 10HDECKY1: MOV AL, AHOUT DX, AL ;设置选择的行为低电平IN AL, DX ;输入列数据AND AL, 0F0H ;屏蔽无用位CMP AL, 0F0H ;该行有键按下吗?JNE DECKY2 ;有,转键译码SHL AH, 1 ;无,扫描下一行LOOP DECKY1 ;所有行扫描完成了?否,扫描下一行JMP DISUP ;是,转显示DECKY2: OR AL, AH ;行和列数值合并为键码MOV BX, 0DECKY3: CMP AL, KYTBL [BX] ;查键码表,找到按键吗?JE DECKY4 ;找到按键转DECKY4INC BX ;没找到JMP DECKY3 ;循环查找DECKY4: MOV BUF [DI], BL ;存按键INC DICMP DI, 4 ;存满4位键入数吗?JNE DECKY5 ;未存满,不修改指针MOV DI, 0 ;已存4位,修改指针DECKY5: IN AL, DX ;检测键释放AND AL, 0FHCMP AL, 0FHJNE DECKY5 ;直到键释放CALL D20MS ;消去键释放时的抖动等待20msJMP DISUPretstart endpD1MS PROC ;延时1ms子程序┇RETD1MS ENDPD20MS PROC ;延时20ms子程序┇RETD20MS ENDPcode endsend start8.5stack segment stack 'stack'dw 32 dup(0)stack endscode segmentstart proc farassume ss: stack, cs: codspush dssub ax, axpush axmov ax, datamov ds, axMOV DX, 383HMOV AL, 90H ;A口方式0入,B口和C口方式0出OUT DX, ALMOV DX, 380HIN AL, DX ;从A口读入原码AND AL, AL ;判原码的符号JNS DN ;为正去DNAND AL, 7FH ;为负,取其绝对值MOV DX, 382HOUT DX, AL ;绝对值从C口输出NEG AL ;将负数的绝对值求补DEC DXOUT DX, AL ;负数的补码从B口输出RETDN: INC DX ;正数直接从B口和C口输出OUT DX, ALINC DXOUT DX, ALretstart endpcode endsend start8.68.7设端口地址为380H~383H。

[VIP专享]汇编语言第八章答案

[VIP专享]汇编语言第八章答案

8.1 写出分配给下列中断类型号在中断向量表中的物理地址。

(1) INT 12H (2) INT 8答:(1) 中断类型号12H在中断向量表中的物理地址为00048H、00049H、0004AH、0004BH;(2) 中断类型号8在中断向量表中的物理地址为00020H、00021H、00022H、00023H。

8.2 用CALL指令来模拟实现INT 21H显示字符T的功能。

答:MOV AH, 2MOV DL, ‘T’PUSH DSPUSHF ;因中断服务程序的返回指令是IRET,而不是RETMOV BX, 0MOV DS, BXCALL DWORD PTR[21H*4] ;用CALL指令调用21H的中断服务程序POP DS8.3 写出指令将一个字节数据输出到端口25H。

答:指令为:OUT 25H, AL8.4 写出指令将一个字数据从端口1000H输入。

答:指令为:MOV DX, 1000HIN AX, DX8.5 假定串行通讯口的输入数据寄存器的端口地址为50H,状态寄存器的端口地址为51H,状态寄存器各位为1时含义如右图所示,请编写一程序:输入一串字符并存入缓冲区BUFF,同时检验输入的正确性,如有错则转出错处理程序ERROR_OUT。

输入数据准备好7 6 5 4 3 2 1 0输出寄存器空奇偶校验错溢出错格式错8.3 状态寄存器各位含义答:程序段如下:MOV DI, 0MOV CX, 80 ;最多输入80个字符BEGIN: IN AL, 51H ;查询输入是否准备好?TEST AL, 02HJZ BEGININ AL, 50H ;输入数据并存入缓冲区BUFFMOV BUFF[DI], ALINC DIIN AL, 51H ;判断是否有错?TEST AL, 00111000BJNZ ERROR_OUTLOOP BEGIN┇8.6 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则就与其相应的设备输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。

编译原理第八章习题答案

编译原理第八章习题答案

第八章习题答案2、请将算术表达式翻-(a+b)*(c+d)+(a+b+c)翻译为:(1)四元式(2)三元式(3)间接三元式答:(2)三元式(3)间接三元式间接码表:三元式:4、修改图8.5中计算声明语句中的名字的类型及相对对峙的翻译方案,以允许在一个声明中可以同时声明多个变量名。

答:翻译方案如下:P->{ offset:= 0 } DD-> D;DD->LL->id,L1 {L.type = L1.type;L.width = L1.width;enter(id,name,L.type,offset;Offset:= offset +L.width}L->:T{ L.type = T.type;L.width = T.width;}T->integer { T.type = integer; T.width:= 4 }T->real { T.type= real; T.width:= 8 }T-> array[num] of T1 { T.type:= array(num.val, T1.type);T.width:= num.val X T1.width }T->^T1 {T.type:=pointer(T1.type); T.width : = 4 }7、利用8.11的翻译方案,将下面的赋值语句翻译成三地址代码:A[i,j] = B[i,j] + C[A[k,l]]+D[i+j]答:令:域宽为wA的维数为:da1,da2, 不变部分为na, B的维数为db1,db2, 不变部分nbC的维数为dc,不变部分ncD的维数为dd,不变部分nd,t1 := i*db1t1:= t1+jt2:= B-nbt3:=w*t1t4:=t2[t3]xb = t4;t1 := k*da1t1:= t1+lt2:= A-nat3:=w*t1t4:=t2[t3]xa = t4;t1:=xa;t2:=C-nc;t3:=w*t1t4:=t2[t3]xca:=t4t1:=i+j;t2:=D-nd;t3:=w*t1;t4:=t2[t3];xd=t4;t5:=xb+xca;t6:=t5+xd;t1 := i*da1t1:= t1+jt2:= A-nat3:=w*t1t2[t3]:=t6。

第8-9章 部分习题答案

第8-9章 部分习题答案
第8章 顺序结构程序设计
本章作业:
2. 7.
14
分析程序段功能 MOV CL, 4 SHL DX,CL MOV BH,AH SHL AX,CL SHR BH,CL OR DL,BH 【解】 给DX、AX赋值,再从结果中观察。例如令 DX=1234H,AX=5678H, 程序段运行后,DX=2345H,AX=6780H。 程序段实现的功能: 把放在(DX,AX)中的32位数左移4位。
2页 第第 2页
汇编语言程序设计
第8章 部分习题答案
7. 【参考程序】
DATA SEGMENT ADDR DW 20 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX LEA BX, ADDR ADD BX, 30 MOV BX, 30 MOV AX, [BX] NEG AX NEG NEG ADDR[BX] [BX] MOV [BX], AX MOV AH, 4CH INT 21H CODE ENDS END START
3页 第第 3页
汇编语言程序设计
第8章 部分习题答案
14. 【参考程序段】
分析: 27=16+8+2+1 MOV BL, AL SHL AL, 1 ADD BL, AL SHL AL, 1 SHL AL, 1 ADD BL, AL SHL AL, 1 ADD BL, AL MOV AL, BL ;把AL送BL保存 另一种方法:用循环方式 ; AL*2 MOV BL, AL ; 完成*(2+1) MOV CX, 27 DEC CX ;AL*8 ; 完成*(8+2+1 L: ) ADD AL, BL ;AL*16 LOOP L ; 完成*(16+8+2+1) ; 结果送回AL

汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案第1章计算机基础知识1.计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。

科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。

书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。

2.简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。

电子管、晶体管、集成电路、大规模集成电路以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium 系列3.计算机的字长是怎么定义的,试举例说明。

计算机能同时处理二进制信息的位宽定义为计算机的字长。

如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。

4.汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。

非数值数据如字符、字符串、逻辑值等。

(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH30H~39H 41H~5AH 61H~7AH9.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。

二进制用B,如10101010B八进制用Q,如437Q。

十进制用D或不用,如54D,或54。

十六进制用H,如27A8H10.完成下列二进制数的加减运算。

(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101=10001000 =1010000111.完成下列十六进制数的加减运算。

(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12.完成下列BCD码的运算。

《汇编语言程序设计》1~10章习题答案

《汇编语言程序设计》1~10章习题答案

《汇编语⾔程序设计》1~10章习题答案1.11.21.31.41.5 (字长 n=8)1.61.7(1) (2) (3) (4) (5)1.8 设补码长度为字节(即为8位)1.9(1) 21-(-18)= 15H-0EEH= 27H (2) 71- 36 = 47H- 24H= 23H (3) -5+ 120 =0FBH+ 78H= 73H (4) -10- 20 =0F6H- 14H=0E2H (5) -85-(-40)=0ABH-0D8H=0D3H 1.1057H,69H,6EH,64H,6FH,77H,73H,20H,39H,35H, 56H,69H,73H,75H,61H,6CH,20H,62H,61H,73H,69H,63HP26第⼆章习题·答案2.6 见P19堆栈:内存中以”先⼊后出”为原则存取、最⼤空间为64KB 的存储区域称之为堆栈栈底:栈区最⾼地址单元的前⼀个单元为栈底4017H:000AH=4017AH 4015H:002AH=4017AH 4010H:007AH=4017AH 说明了同⼀个物理地址可以⽤多个逻辑地址表⽰。

3.1(1) 寄存器寻址(2) 寄存器间接寻址, 物理地址=30700H(3) 变址寻址/寄存器相对寻址,物理地址=31804H(4) 基址寻址/寄存器相对寻址,物理地址=41700H(5) 基址变址寻址, 物理地址=30800H(6) 相对基址变址寻址, 物理地址=42504H3.2(1) 错:源不能是基址基址寻址。

(2) 错:源和⽬不能同时为内存单元。

(3) 错:直接给出的移位位数不能是3。

(4) 错:取反指令只能有⼀个操作数。

(5) 错:不能将⽴即数直接送⼊段寄存器。

(6) 错:⽬不能是段寄存器CS。

(7) 错:第⼀个操作数不能是⽴即数。

(8) 当VALUE1为字变量时,对;否则为错:源和⽬的类型(长度)不⼀致。

(9) 错:源和⽬不能同时为段寄存器。

汇编语言第八章答案

汇编语言第八章答案

8.1 写出分配给下列中断类型号在中断向量表中的物理地址。

(1) INT 12H (2) INT 8答:(1) 中断类型号12H在中断向量表中的物理地址为00048H、00049H、0004AH、0004BH;(2) 中断类型号8在中断向量表中的物理地址为00020H、00021H、00022H、00023H。

8.2 用CALL指令来模拟实现INT 21H显示字符T的功能。

答:MOV AH, 2MOV DL, ‘T’PUSH DSPUSHF ;因中断服务程序的返回指令是IRET,而不是RETMOV BX, 0MOV DS, BXCALL DWORD PTR[21H*4] ;用CALL指令调用21H的中断服务程序POP DS8.3 写出指令将一个字节数据输出到端口25H。

答:指令为:OUT 25H, AL8.4 写出指令将一个字数据从端口1000H输入。

答:指令为:MOV DX, 1000HIN AX, DX8.5 假定串行通讯口的输入数据寄存器的端口地址为50H,状态寄存器的端口地址为51H,状态寄存器各位为1时含义如右图所示,请编写一程序:输入一串字符并存入缓冲区BUFF,同时检验输入的正确性,如有错则转出错处理程序ERROR_OUT。

输入数据准备好7 6 5 4 3 2 1 0输出寄存器空奇偶校验错溢出错格式错8.3 状态寄存器各位含义答:程序段如下:MOV DI, 0MOV CX, 80 ;最多输入80个字符BEGIN: IN AL, 51H ;查询输入是否准备好?TEST AL, 02HJZ BEGININ AL, 50H ;输入数据并存入缓冲区BUFFMOV BUFF[DI], ALINC DIIN AL, 51H ;判断是否有错?TEST AL, 00111000BJNZ ERROR_OUTLOOP BEGIN┇8.6 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则就与其相应的设备输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。

汇编语言与接口技术课后答案(1-8章完整版)-王让定朱莹编(下载后可查看剩余几章内容)

汇编语言与接口技术课后答案(1-8章完整版)-王让定朱莹编(下载后可查看剩余几章内容)

第一章(下载后可查看)第二章1.8086/8088 CPU 的地址总线有多少位?其寻址范围是多少?答:8086/8088 CPU 的地址总线共20位, 最大可寻址1MB空间。

2.8086/8088 CPU分为哪两个部分?各部分主要由什么组成?答:8086/8088 CPU 分为总线接口部件(BIU)和执行部件(EU)两个部分。

其中BIU包括:4 个16 位的段地址寄存器(CS、DS、SS、ES);1个16位的指令指针寄存器IP;1个20位的地址加法器;指令队列寄存器;内部寄存器;输入输出总线控制逻辑;EU包括:4 个16 位的通用数据寄存器(AX、BX、CX、DX);4个16位的专用寄存器(BP、SP、SI、DI);1个16位的标志寄存器FR;4. 8086/8088 CPU 中有几个通用寄存器?有几个变址寄存器?有几个指针寄存器?通常哪几个寄存器亦可作为地址寄存器使用?答:8086/8088 CPU 中共有:8个16位的通用寄存器AX、BX、CX、DX 、BP、SP、SI、DI;2 个变址寄存器SI 、DI;2 个指针寄存器BP、SP;其中BX、BP、SI 、DI 亦可作地址寄存器。

5.8086/8088 CPU 中有哪些标志位?它们的含义和作用如何?答:8086/8088 CPU中共有9个标志位,其中DF、IF 和TF为控制标志位,其余6 个为状态标志位。

它们的含义和作用如下所示:CF(Carry Flag) 进位标志: 若算术运算的结果产生了进位或借位( 对字节操作最高位是D7位;对字操作最高位是D15位),则CF=1,否则CF=0。

PF(Parity/Even Flag) 奇偶标志:如果运算结果中含有偶数个1, 则PF=1,否则PF=0。

此标志位主要用于数据通信中, 检测数据传送有无出错。

AF(Auxiliary Carry Flag) 辅助进位标志: 用于反映一个字节( 字的低字节) 的低4位向高4位有无进位(借位)的情况,有进(借)位时,AF=1,否则AF=0。

汇编语言程序设计 第八章例题

汇编语言程序设计  第八章例题

第八章输入输出与中断例8-5 利用软中断将一组无符号的字数据以ASCII码的形式显示输出,假定软中断使用的中断类型码是60H。

寄存器和存储单元分配如下:TAB1:待输出的一组无符号字数据的首地址。

TAB2:十六进制字符表的首地址。

BUF:存放一个字数据的十六进制代码区的首地址。

SI:存放TAB1的偏移地址。

DI:存放TAB2的偏移地址。

BX:存放BUF的偏移地址。

CX:存放TAB1表中字数据的个数COUNT;中断处理程序名称:INT60功能:将AX寄存器中的一个无符号的字数据以十六进制的形式输出。

入口参数:AX,接收待显示的一个无符号的数据。

出口参数:对应的十六进制数显示输出。

STACK SEGMENT STACKDB 100 DUP(0)STACK ENDSDATA SEGMENTTAB1 DW 32767,126,0,78,6943,65535COUNT EQU ($-TAB1)/2TAB2 DB '0123456789ABCDEF'BUF DB 4 DUP(0),'H$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AXPUSH DS ;开始初始化中断向量表MOV AX,SEG INT60MOV DS,AXMOV DX,OFFSET INT60MOV AH,25HMOV AL,60HINT 21H·2·汇编语言程序设计POP DS ;结束初始化中断向量表LEA SI,TAB1 ;设置取数指针MOV CX,COUNT ;设置循环次数LOPA: MOV AX,[SI]INT 60H ;调用软中断处理程序显示一个字数据MOV AH,2 ;显示空格MOV DL,' 'INT 21HADD SI,2 ;指向下一个待输出的字数据LOOP LOPAMOV AH,4CHINT 21HINT60 PROCPUSH CXLEA DI,BUF ;设置显示代码存储区指针LEA BX,TAB2 ;设置十六进制字符表指针MOV CH,4 ;设置循环次数MOV CL,4 ;设置移位次数LOPB: ROL AX,CL ;循环左移4位PUSH AXAND AX,0FH ;截取低4位XLAT ;查表取对应的ASCII字符MOV [DI],AL ;将对应的ASCII字符存入显示代码存储区INC DIPOP AXDEC CHJNE LOPB ;当4个十六进制字符未处理完时转移MOV AH,9 ;显示字数据的十六进制形式LEA DX,BUFINT 21HPOP CXIRETINT60 ENDPCODE ENDSEND BEGIN例8-16 输出字符串“HELLO”,每个输出字符之间的时间间隔是10秒。

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

8.1 写出分配给下列中断类型号在中断向量表中的物理地址。

(1) INT 12H (2) INT 8答:(1) 中断类型号12H在中断向量表中的物理地址为00048H、00049H、0004AH、0004BH;(2) 中断类型号8在中断向量表中的物理地址为00020H、00021H、00022H、00023H。

8.2 用CALL指令来模拟实现INT 21H显示字符T的功能。

答:MOV AH, 2MOV DL, ‘T’PUSH DSPUSHF ;因中断服务程序的返回指令是IRET,而不是RETMOV BX, 0MOV DS, BXCALL DWORD PTR[21H*4] ;用CALL指令调用21H的中断服务程序POP DS8.3 写出指令将一个字节数据输出到端口25H。

答:指令为:OUT 25H, AL8.4 写出指令将一个字数据从端口1000H输入。

答:指令为:MOV DX, 1000HIN AX, DX8.5 假定串行通讯口的输入数据寄存器的端口地址为50H,状态寄存器的端口地址为51H,状态寄存器各位为1时含义如右图所示,请编写一程序:输入一串字符并存入缓冲区BUFF,同时检验输入的正确性,如有错则转出错处理程序ERROR_OUT。

输入数据准备好7 6 5 4 3 2 1 0输出寄存器空奇偶校验错溢出错格式错8.3 状态寄存器各位含义答:程序段如下:MOV DI, 0MOV CX, 80 ;最多输入80个字符BEGIN: IN AL, 51H ;查询输入是否准备好?TEST AL, 02HJZ BEGININ AL, 50H ;输入数据并存入缓冲区BUFFMOV BUFF[DI], ALINC DIIN AL, 51H ;判断是否有错?TEST AL, 00111000BJNZ ERROR_OUTLOOP BEGIN┇8.6 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则就与其相应的设备输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。

两个状态寄存器的端口地址分别是0024H和0036H,与其相应的数据输入寄存器的端口地址则为0026H和0038H,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。

答:程序段如下:MOV DI, 0MOV SI, 0BEGIN: IN AL, 24HTEST AL, 08H ;查询第一个设备的输入是否结束?JNZ EXITTEST AL, 01H ;查询第一个设备的输入是否准备好?JZ BEGIN1IN AL, 26H ;输入数据并存入缓冲区BUFF1MOV BUFF1[DI], ALINC DIBEGIN1: IN AL, 36HTEST AL, 08H ;查询第二个设备的输入是否结束JNZ EXITTEST AL, 01H ;查询第二个设备的输入是否准备好?JZ BEGININ AL, 38H ;输入数据并存入缓冲区BUFF2MOV BUFF2[SI], ALINC SIJMP BEGINEXIT: ┇8.7 假定外部设备有一台硬币兑换器,其状态寄存器的端口地址为0006H,数据输入寄存器的端口地址为0005H,数据输出寄存器的端口地址为0007H。

试用查询方式编制一程序,该程序作空闲循环等待纸币输入,当状态寄存器第2位为1时,表示有纸币输入,此时可从数据输入寄存器输入的代码中测出纸币的品种,一角纸币的代码为01,二角纸币为02,五角纸币则为03。

然后程序在等待状态寄存器的第3位变为1后,把应兑换的五分硬币数(用16进制表示)从数据输出寄存器输出。

答:程序段如下:BEGIN: IN AL, 06H ;查询是否有纸币输入?TEST AL, 04HJZ BEGININ AL, 05H ;测试纸币的品种CMP AL, 01H ;是一角纸币吗?JNE NEXT1MOV AH, 02 ;是一角纸币,输出2个5分硬币JMP NEXTNEXT1: CMP AL, 02H ;是二角纸币吗?JNE NEXT2MOV AH, 04 ;是二角纸币,输出4个5分硬币JMP NEXTNEXT2: CMP AL, 03H ;是五角纸币吗?JNE BEGINMOV AH, 10 ;是五角纸币,输出10个5分硬币NEXT: IN AL, 06H ;查询是否允许输出5分硬币?TEST AL, 08HJZ NEXTMOV AL, AH ;输出5分硬币OUT 07H, ALJMP BEGIN8.8 给定(SP)=0100H,(SS)=0300H,(FLAGS)=0240H,以下存储单元的内容为(00020) =0040H,(00022)=0100H,在段地址为0900及偏移地址为00A0H的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么?答:执行INT 8指令后,(SP)=00FAH,(SS)=0300H,(CS)=0100H,(IP)=0040H,(FLAGS) =0040H栈顶的三个字是:原(IP)=00A2H,原(CS)=0900H,原(FLAGS)=0240H8.9 类型14H的中断向量在存储器的哪些单元里?答:在0000:0050H,0000:0051H,0000:0052H,0000:0053H四个字节中。

8.10 假定中断类型9H的中断处理程序的首地址为INT_ROUT,试写出主程序中为建立这一中断向量而编制的程序段。

答:程序段如下:┇MOV AL, 1CH ;取原中断向量,并保护起来MOV AH, 35HINT 21HPUSH ESPUSH BXPUSH DSMOV AX, SEG INT_ROUTMOV DS, AXMOV DX, OFFSET INT_ROUTMOV AL, 09HMOV AH, 25H ;设置中断向量功能调用INT 21HPOP DS┇POP DX ;还原原中断向量POP DSMOV AL, 1CHMOV AH, 25HINT 21H8.11 编写指令序列,使类型1CH的中断向量指向中断处理程序SHOW_CLOCK。

答:程序段如下:┇MOV AL, 1CHMOV AH, 35H ;取中断向量功能调用,取原中断向量INT 21HPUSH ESPUSH BXPUSH DSMOV AX, SEG SHOW_CLOCKMOV DS, AXMOV DX, OFFSET SHOW_CLOCKMOV AL, 1CHMOV AH, 25H ;设置中断向量功能调用INT 21HPOP DS┇POP DXPOP DSMOV AL, 1CHMOV AH, 25H ;设置中断向量功能调用,还原原中断向量INT 21H┇8.12 如设备D1,D2,D3,D4,D5是按优先级次序排列的,设备D1的优先级最高。

而中断请求的次序如下所示,试给出各设备的中断处理程序的运行次序。

假设所有的中断处理程序开始后就有STI指令。

(1) 设备D3和D4同时发出中断请求。

(2) 在设备D3的中断处理程序完成之前,设备D2发出中断请求。

(3) 在设备D4的中断处理程序未发出中断结束命令(EOI)之前,设备D5发出中断请求。

(4) 以上所有中断处理程序完成并返回主程序,设备D1,D3,D5同时发出中断请求。

答:各设备的中断处理程序的运行次序是:INT_D3,INT_D2嵌套INT_D3,INT_D4,INT_D5;INT_D1,INT_D3,INT_D5。

8.13 在8.12题中假设所有的中断处理程序中都没有STI指令,而它们的IRET指令都可以由于FLAGS出栈而使IF置1,则各设备的中断处理程序的运行次序应是怎样的?答:各设备的中断处理程序的运行次序是:INT_D3,INT_D2,INT_D4,INT_D5;INT_D1,INT_D3,INT_D5。

8.14 试编制一程序,要求测出任一程序的运行时间,并把结果打印出来。

答:程序段如下:TITLE TEST_TIME.EXE ;测试程序运行时间程序;******************************************DSEG SEGMENT ;定义数据段COUNT DW 0 ;记录系统时钟(18.2次中断/秒)的中断次数SEC DW 0 ;存放秒钟数MIN DW 0 ;存放分钟数HOURS DW 0 ;存放小时数PRINTTIME DB 0DH, 0AH, ‘The time of exection program is:’CHAR_NO EQU $- PRINTTIMEDSEG ENDS ;以上定义数据段;******************************************CSEG SEGMENT ;定义代码段MAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值MOV AL, 1CH ;取原来的1CH中断向量MOV AH, 35HINT 21HPUSH ES ;保存原来的1CH中断向量PUSH BXPUSH DS ;设置新的1CH中断向量MOV AX, SEG CLINTMOV DS, AXMOV DX, OFFSET CLINTMOV AL, 1CHMOV AH, 25HINT 21HPOP DSIN AL, 21H ;清除时间中断屏蔽位并开中断AND AL, 0FEHOUT 21H, ALSTI┇;要求测试时间的程序段POP DX ;恢复原来的1CH中断向量POP DSMOV AL, 1CHMOV AH, 25HINT 21HCALL PRINT ;打印输出测试时间RET ;返回DOSMAIN ENDP;----------------------------------------------------------------------------------CLINT PROC NEAR ;中断服务子程序PUSH DSPUSH BXMOV BX, SEG COUNTMOV DS, BXLEA BX, COUNTINC WORD PTR [BX] ;记录系统时钟的中断次数单元+1CMP WORD PTR [BX],18 ;有1秒钟吗?JNE TIMEOKCALL INCTEST ;有1秒钟,转去修改时间ADJ: CMP HOURS, 12 ;有12小时吗?JLE TIMEOKSUB HOURS, 12 ;有12小时,将小时数减去12TIMEOK: MOV AL, 20H ;发中断结束命令OUT 20H, ALPOP BXPOP DSIRETCLINT ENDP ;CLINT中断服务子程序结束;----------------------------------------------------------------------------------INCTEST PROC NEAR ;修改时间子程序MOV WORD PTR [BX], 0 ;中断次数单元或秒单元或分单元清0 ADD BX, 2INC WORD PTR [BX] ;秒单元或分单元或时单元+1CMP WORD PTR [BX],60 ;有60秒或60分吗?JLE RETURNCALL INCTEST ;先修改秒单元,再修改分单元,再修改时单元RETURN: RETINCTEST ENDP ;INCTEST子程序结束;----------------------------------------------------------------------------------PRINT PROC NEAR ;打印输出子程序LEA BX, PRINTTIME ;打印输出PRINTTIME信息MOV CX, CHAR_NOROTATE: MOV DL, [BX]MOV AH, 05HINT 21HINC BXLOOP ROTATEMOV BX, HOURS ;打印时间的小时数CALL BINIDEC ;调二进制转换为10进制并打印输出子程序MOV DL, ‘:’ ;打印输出冒号‘:’MOV AH, 05HINT 21HMOV BX, MIN ;打印时间的分钟数CALL BINIDECMOV DL, ‘:’MOV AH, 05HINT 21HMOV BX, SEC ;打印时间的秒钟数CALL BINIDECRETPRINT ENDP ;PRINT子程序结束;----------------------------------------------------------------------------------BINIDEC PROC NEAR ;二进制转换为10进制子程序MOV CX, 10000DCALL DEC _DIV ;调除法并打印输出子程序MOV CX, 1000DCALL DEC _DIVMOV CX, 100DCALL DEC _DIVMOV CX, 10DCALL DEC _DIVMOV CX, 1DCALL DEC _DIVRETBINIDEC ENDP ;BINIDEC子程序结束;----------------------------------------------------------------------------------DEC_DIV PROC NEAR ;除法并打印输出子程序MOV AX, BXMOV DX, 0DIV CXMOV BX, DX ;余数保存在(BX)中作下一次的除法MOV DL, AL ;商(在00H~09H范围内)送(DL)ADD DL, 30H ;转换为0~9的ASCII码MOV AH, 05H ;打印输出INT 21HRETDEC_DIV ENDP ;DEC_DIV子程序结束;----------------------------------------------------------------------------------CSEG ENDS ;以上定义代码段;******************************************END START ;汇编语言源程序结束。

相关文档
最新文档