1、复习复习P179P179第第4-274-27题:题:编写一个程序从键盘输入编写一个程序从键盘输入4 4位十六进制数的位十六进制数的ASCIIASCII码,并将其转换成码,并将其转换成4 4位十六进制数存位十六进制数存入入DXDX中。中。分析研究分析研究 整个问题可以分为两部分,数整个问题可以分为两部分,数据输入和转换。据输入和转换。数据输入部分的流程图数据输入部分的流程图30H=AL=39H?AL-AL-30HAL-AL-37HYN1号系统调用号系统调用输入数到输入数到AL出错提示出错提示41H=AL=46H?YAL-AL-57H61H=AL=66H?NNYBL-4,DX-0DX左移四位左移四
2、位数据存入数据存入DX的流程图的流程图DL-DL ALY结束结束BL=0?NBL-BL-1程序代码程序代码.model smallmodel small.data.datastrstr db 0dh,0ah,input error!$db 0dh,0ah,input error!$.code.codemov mov ax,dataax,datamov dsmov ds,ax,axmov dxmov dx,0,0mov blmov bl,4,4lplp:mov clmov cl,4,4shl dxshl dx,clclmovmov ah,1 ah,1intint 21h 21hcmpcmp al
3、,30h al,30hjbjb over overcmpcmp al,39h al,39hja ja alpalpsub al,30hsub al,30hjmp jmp out1out1alp:alp:cmp cmp al,Aal,Ajb jb overovercmpcmp al,F al,Fja salpja salpsub al,37hsub al,37hjmp jmp out1out1salpsalp:cmp cmp al,aal,ajb jb overoveralp:alp:cmp cmp al,fal,fja ja overoversub al,57hsub al,57hout1:o
4、r dl,alout1:or dl,aldec bldec bljnz lpjnz lpjmp jmp donedoneover:over:movmov ah,9 ah,9mov dxmov dx,offset,offset strstrint int 21h21hdone:done:mov mov ah,4chah,4chint int 21h21hendend编码要点:编码要点:1.1.先左移再放入新的十六进制数,最后一先左移再放入新的十六进制数,最后一位十六进制数放入时,不用再左移了;位十六进制数放入时,不用再左移了;2.2.非法字符输入,给出错误提示;非法字符输入,给出错误提示;3.3
5、.正常输入时,输入完正常输入时,输入完4 4位十六进制数即结位十六进制数即结束。束。P179P179第第4-294-29题:题:读取系统日期并显示。读取系统日期并显示。分析研究分析研究 核心问题是如何将读取的二进核心问题是如何将读取的二进制数转换为制数转换为BCDBCD码后再转换为码后再转换为ASCIIASCII码,然码,然后输出。后输出。全部程序由主程序和子程序CONVERT组成.model small.data t1 db 4 dup(?),-,2 dup(?),-,2 dup(?),0dh,0ah,$.code mov ax,data mov ds,ax mov ah,2ah int 2
6、1h;hour in cx,minute in dh,second in dl mov ax,cx年份有4位,要转换两次 mov bl,100;year in 4 digits div bl mov bl,ah mov si,offset t1 call convert mov al,bl mov si,offset t1+2 call convert 转换月和日,然后输出显示mov al,dh mov si,offset t1+5 call convert mov al,dl mov si,offset t1+8 call convertmov dx,offset t1 mov ah,9 i
7、nt 21h现在知道t1数据结构的好处了?mov ah,4ch int 21h子程序将不超过99的数分离并转换为ASCII码放入数据区convert proc near aam add ah,30h mov si,ah add al,30h mov si+1,al retconvert endpend当然子程序也可以这样编convert proc nearmov ah,0 mov bh,10div bh add al,30h mov si,ah add ah,30h mov si+1,al retconvert endp评注1.为防止程序编码效率低下,最好还是先画好流程图;2.画流程图不是目的
8、,而是为编码服务,还有一个功能是方便他人阅读;3.画流程图有一定规范,不能太随便,不然没法交流;课程设计报告必须画流程图!4.掌握流程图是计算机程序设计的基础。程序=流程图+数据结构I/O控制已知某输入设备的数据端口地址为60H,状态端口地址为61H,其中D1位为“1”时,表示“READY”状态,数据与状态端口均为8位。试编程实现:采用查询方式从该设备输入10个ASCII码表示的十进制数,并求出这10个十进制数的累加和;将 此 累 加 和 转 换 成 B C D 码,并 存 放 到NBCDH(百位数)和NBCDL(存十位和个位数)单元中。注:注:只要求写出程序的可执行部分,可以不写任何伪指令。
9、任务MOV CX,10MOV BL,0 INLOOP:IN AL,61H TEST AL,02H JZ INLOOP IN AL,60H AND AL,OFH;ASCII十进制(BCD)ADD BL,AL LOOP INLOOP;共输入10个 MOV AL,BL ;累加和AL任务(2)MOV AH,0 MOV BL,100 DIV BL;AXBLAL,余数AH MOV NBCDH,AL;存百位数 MOV AL,AH MOV AH,0 MOV BL,10 DIV BL;任务续MOV CL,4 ROL AL,CL;AL循环左移四位 OR AL,AH;形成组合型BCD码 MOV NBCDL,AL;存
10、十位,个位数HLT存储器如下图,某系统的存储器中配有两种芯片:容量为2KX8的EPROM和容量为1KX8的SRAM。利用A10-A15采用74LS138译码器产生片选信号,Y0、Y6、Y7直接连到三片EPROM(1#、2#、3#),Y4、Y5则通过一组门电路接到四片SRAM(4#、5#、6#、7#)。(1)确定存储器1#、2#、3#、7#的地址范围;(2)已知5#存储器范围为A400H-A7FFH,6#存储器范围为A800H-ABFFH,补画出所需连线。根据电路写地址范围1.各存储器芯片的地址范围如下:1#:8000H87FFH2#:B000HB7FFH3#:B800HBFFFH7#:AC00
11、HAFFFH按地址范围接线2.接线为PIN4-Y4PIN5-PIN13(A10)PIN10Y5(PIN12)编写将一位十六进制数HEX转换成ASCII码并显示的子程序。htoa proc nearmov dl,hexcmp al,10jnc alphaadd dl,30hjmp disalpha:add dl,37hdis:mov ah,2int 21hrethtoa endp 常用接口芯片某8086微机系统中8253的端口地址为40H43H,要求计数器0工作在方式0,计数初值为0FFH,按二进制计数;计数器1工作在方式2,计数初值为10,按BCD码计数。试写出初始化程序段。8253控制字格式如下:分析 由题意,计数器0的控制字为00010000=10H,按二进制写计数初值低位,计数器1的控制字为01010101=55H,按BCD码写计数初值低8位。初始化程序段如下:程序mov al,10hout 43h,almov al,0ffhout 40h,almov al,55hout 43h,almov al,10hout 41h,al 其它复习要点1.做过的作业,及时改正2.实验程序3.测验过的问题 4.闭卷考试,需要参考的内容都在卷子上5.综合难度不比已解密的试卷更难6.别忘记写姓名、学号7.祝各位好运!