1、实验一 顺序与分支程序设计 一 、实验目的 1) 掌握顺序程序设计方法。2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在 PC 机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容 1) 有一字变量 BUF1 是以原码表示的有符号数,要求将其转换为反码和补码,分别存入 BUF2 和 BUF3 单元,并在屏幕上显示出来。程序: DATA SEGMENTBUF1 DW 9876HBUF2 DW ?BUF3 DW ?BUF4 DB 8 DUP(0),$DATA ENDSSTACK SEGMENT DW 40H DUP(0
2、)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,BUF1ADD AX,0JS NEXTMOV BUF2,AXMOV BUF3,AXJMP NEXT1NEXT:AND AX,7FFFHNOT AXMOV BUF2,AXINC AXMOV BUF3,AXJMP NEXT1NEXT1:MOV CX,0004HMOV AX,BUF2MOV DI,OFFSET BUF4NEXT2:PUSH CXMOV CL,4ROL AX,CLMOV DX,AXPOP CXAND AL,0FHCMP AL,0AH
3、JB NEXT3ADD AL,07HNEXT3:ADD AL,30HMOV DI,ALMOV AX,DXINC DILOOP NEXT2MOV DX,OFFSET BUF4MOV AH,09HINT 21HNEXT4:MOV CX,0004HMOV AX,BUF3MOV DI,OFFSET BUF4+2NEXT5:PUSH CXMOV CL,4ROL AX,CLMOV DX,AXPOP CXAND AL,0FHCMP AL,0AHJB NEXT6ADD AL,07HNEXT6:ADD AL,30HMOV DI,ALMOV AX,DXINC DILOOP NEXT5MOV DX,OFFSET B
4、UF4+2MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START结果:E789 E78A2)有两个两字节无符号数分别放在存储单元 A、B 起始的缓冲器中,求其和,结果放在 A 起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。 程序:DATA ENDSSTACK SEGMENT PARA STACKDW 40H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX, DATAMOV DS,AXMOV AH,AMOV BH,BMOV AL,A+1MOV BL,B+1A
5、DD AH,BHADC AL,BLMOV CX,0004HMOV DI,OFFSET ANEXT:PUSH CXMOV CL,04HROL AX,CLMOV DX,AXPOP CXAND AX,000FHCMP AL,0AHJB NEXT1ADD AL,07HNEXT1:ADD AL,30HMOV DI,ALMOV AX,DXINC DILOOP NEXTMOV DX,OFFSET AMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START结果:8A9B3) 在 BUF 和 BUF+1、BUF+2 单元分别放有一个无符号字节型数,编程序将其中最大
6、数存入 MAX 单元,并在屏幕上显示。 程序:DATA SEGMENTBUF DB 70H,35H,1FHMAX DB ?,?,?,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,BUFMOV BL,BUF+1CMP AL,BLJAE NEXTXCHG AL,BLNEXT:MOV BL,BUF+2CMP AL,BLJAE NEXT1XCHG AL,BLNEXT1:MOV MAX,ALMOV CL,04HROL AL,CLMOV BL,ALAND AL,0FHCMP AL,0AHJB NEX
7、T2ADD AL,07HNEXT2:ADD AL,30HMOV MAX+1,ALMOV AL,BLROL AL,CLAND AL,0FHCMP AL,0AHJB NEXT3ADD AL,07HNEXT3:ADD AL,30HMOV MAX+2,ALMOV DX,OFFSET MAX+1MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START结果:704) 要求同上,只是比较的数为有符号数。 程序:DATA SEGMENTBUF DB 98H,32H,75HMAX DB ?,?,$DATA ENDSCODE SEGMENTASSUME CS:COD
8、E,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,BUFMOV BL,BUF+1CMP AL,BLJG NEXTXCHG AL,BLNEXT:MOV BL,BUF+2CMP AL,BLJG NEXT1XCHG AL,BLNEXT1:CALL CHGASCMOV AH,4CHINT 21HCHGASC PROC MOV CX,0002HMOV DI,OFFSET MAXL6:PUSH CXMOV CL,04HROL AL,CLMOV DL,ALPOP CXAND AL,0FHCMP AL,0AHJB L7ADD AL,07HL7:ADD AL,30HMOV DI
9、,ALMOV AL,DLINC DILOOP L6MOV DX,OFFSET MAX MOV AH,09HINT 21HRETCHGASC ENDP CODE ENDSEND START结果:756) 从键盘上接收一位十进制数 X,计算 Y 值,并以十六进制形式显示出来,Y 按下列公式计算。)6(2/5432XY程序:调用子程序的显示DATA SEGMENTTABLE DW L1,L2,L3,L4A DW ?B DB 0AH,4 DUP(0),$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,01HINT 21HCMP AL,31HJB L8CMP AL,39HJAE L8AND AL,000FHXOR AH,AHSUB AL,3SHL AL,1MOV BX,OFFSET TABLEADD BX,AXSHR AL,1ADD AL,3JMP BXL1:MOV DX,AXMUL ALADD AX,DXMOV A,AXCALL CHGASCJMP L8L2:MOV BL,ALMUL ALMOV DX,AXMOV AL,BLMOV BL,2MUL BL