南华大学微机原理汇编实验 键盘上输入两个数求和

合集下载

微机原理实验:加减法

微机原理实验:加减法
mov cx, 8 ; 循环次数
print: mov ah, 2
mov dl, '0'
test bl, 10000000b
jz zero
mov dl, '1'
zero: int 21h
shl bl, 1
loop print
; 设置背景及字体颜色
mov cx, 9 ; 字符数量
mov di, 01h ; 起始地址
jz zero_2
mov dl, '1'
zero_2: int 21h
shl bh, 1
loop print_2
; 设置背景及字体颜色来自mov cx, 9 ; 字符数量
mov di, 01h ; 起始地址
color_2: mov [di], 11100000b ;黄底(1110) ,黑字(0000)
add di, 2
color: mov [di], 11110001b ;白底(1111) ,蓝字(0001)
add di, 2
loop color
mov dl, 'b'
mov ah, 2
int 21h
mov ax, 4c00h
int 21h
(二)减法部分
name "add-sub"
org 100h
; set segment register
mov ax, 0b800h
mov ds, ax
; 8 + 10 = 18 (decimal) or bin=00010010b
mov al, 8
mov bl, 10
add bl, al
mov bh, bl ;保存加法结果

微机原理实验报告-两个多位十进制数相加的实验等.doc

微机原理实验报告-两个多位十进制数相加的实验等.doc

微机原理实验报告-两个多位十进制数相加的实验等微机原理实验报告班级:学号:姓名:实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、程序流程图图3-1四、参考程序清单DATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END E QU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ A D3RETADDA ENDP CODE ENDSEND S TART五、实验结果分析我们计算的结果是:84256他们结果是一样的。

微机原理实验两个十进制位相乘程序

微机原理实验两个十进制位相乘程序

1、计算1+2+3+···+n=?其中n通过键盘输入,累加和小于216 DATA SEGMENTINF1 DB "Please input a number(0-65535):$"IBUF DB 7,0,6 DUP(?)OBUF DB 6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET INF1MOV AH,09HINT 21HMOV DX,OFFSET IBUFMOV AH,0AHINT 21HMOV CL,IBUF+1MOV CH,0MOV SI,OFFSET IBUF+2MOV AX,0AGAIN:MOV DX,10MUL DXAND BYTE PTR[SI],0FHADD AL,[SI]ADC AH,0INC SILOOP AGAINMOV CX,AXMOV AX,0MOV BX,1LOOP2:ADD AX,BXINC BXLOOP LOOP2MOV BX,OFFSET OBUF+5MOV BYTE PTR[BX],'$'MOV CX,0AHLOOP1:MOV DX,0DIV CXADD DL,30HDEC BXMOV [BX],DLOR AX,AXJNZ LOOP1MOV DL,0AHMOV AH,02HINT 21HMOV DX,BXMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2、从键盘输入两个一位十进制数,计算这两个数之积,并将其结果在屏幕上显示出来。

DATA SEGMENTINFOR1 DB 'Please input the first data(<10):$'INFOR2 DB 0AH, 0DH, 'Please input the second data(<10):$'INFOR3 DB 0AH, 0DH, 'The result is:$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET INFOR1INT 21HMOV AH,01HINT 21HSUB AL,30HMOV BL,ALMOV DX,OFFSET INFOR2 MOV AH,09HINT 21HMOV AH,01HINT 21HSUB AL,30HMOV AL,ALMOV BL,BLMUL BLAAMPUSH AXMOV DX,OFFSET INFOR3INT 21HPOP AXPUSH AXMOV DL,AHADD DL,30HMOV AH,02HINT 21HPOP AXMOV DL,ALADD DL,30HMOV AH,02HINT 21HMOV AH,4CHINT 21H CODE ENDSEND START。

新编微机原理(B)实验指导书(2010学生版)2

新编微机原理(B)实验指导书(2010学生版)2

一、实验目的1.熟悉在PC 机上建立・汇编、连接、调试和运行汇编语言程序的过程。

2・掌握数据传送、算术运算、BCD 码调整和循环指令的用法,掌握字符显示的方法。

3・熟悉和掌握用DEBUG 调试程序的方法。

二、实验内容1.将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII 码形 式#自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5 个内存单元中(低位在前),并显示相加的结果。

2・将第1题改为(高位在前)的形式存放数据,程序如何修改?3. 上述程序只显示了相加的结果,没有显示被加数和加数,如果在第1题的基础上将显示格式改为 47193+28056=75249,则程序如何修改?4. 上而程序没有考虎运算结果最高位有进位的情况,如果考虑可能产生的进位,则要显示完整的结 果,程序如何修改?(提示:INC 和LOOP 指令均不影响CF )三、实验要求1. 实验内容1、内容2为基础题,必须做,完成后可得7分。

2. 实验内容3为提高题,完成后可再加2分。

3・实验内容4为提高题,完成后可再加1分.四、实验程序和结果1.将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII 码形 式徉自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)•结果送回以DATA3为首的5 个内存单元中(低位在前),并显示相加的结果。

:存放被加数47193. ASCII 码形式,低位在前 :存放加数28056, ASCII 码形式,低位在前 班级 学号 姓名 实验R 期 实验 两个多位十进制数相加实验DATADATA1DATA2DATA3DATACODE SEGMENT DB 33H39H,31H37H,34H DB 36H,35H30H,38H,32H DB 5 DUP(?) ENDSSEGMENT:留出5个存放结果的单元:循环次数置5, 5个位要相加5次 :SI 放地址位移量,每个数的第一字节地址位務呈为0 ;CF 淸0,防止第1个字节相加时ADC 指令多加CF 中可能的1 :取被加数一个字节送AL, DATA1偏移地址+SI 为有效地址 :AL+加数对应字节+CF (低位相加时可能的进位)结果送AL:AL 中两字节相加的和调整成非压缩的BCD 码,进位在CF 中 :结果送入DATA3对应字节单元中 ;地址位務量加1指向高一位字节单元 :5次未到,继续循环 ASSUME CS:CODBDS:DATASTART: MOV AX,DATAMOV DS, AXMOV CX,5MOV SIR CLCNEXT: MOVAL.DATAlpI] ADCAUDATA2[SI] AAAMOVDATA3[SI],AL INCSI LOO P NEXT:显示5个位• SI 中的数既是循环次数又作地址位移量 :将结果从高位单元开始把非压缩的BCD 码变成ASCII 码 :将ASCII 码送DL 以满足2号功能调用的规宦要求 :功能号送AH ;调用2号功能,显示一位数字 :次数减1 :5次未到,继续循环 ;功能号送AH:调用4CH 号功能,返回DOS 的形式存放数据,程序如何修改?(要求给出程序、注释、运行结果)MOV SI, 5DISP: ADD DATA3[SM],30HMOVDUDATA3[SM)MOV AH,2INT21HDEC SIJNZ DISPMOVAH4CHINT21H CODE ENDSEND START运行结果J 752492・将第1题改为(高位在前)五、实验总结和体会班级学号姓名实验R期实验二字符串匹配实验一、实验目的1.掌握提示信息的使用方法及键盘输入字符串的用法。

求和输出--微机原理实验报告

求和输出--微机原理实验报告
DISPAL PROC NEAR
MOV CX,5
MOV BX,10
DISP1: CWD;字扩展
DIV BX;AX除以10
XCHG DX,AX;交换:
ADD AL,'0';变为ASCII码
PUSH AX
XCHG DX,AX
MOV DX,0
LOOP DISP1
MOV CX,5
DISP2: POP DX
CALL ECHOCH ;显示
二、环境(软、硬件平台)
计算机(xp系统)、DOS系统、masm6
emu8086
三、内容及步骤(包括程序流程及说明)
DATA SEGMENT;数据定义
N DB 4
DB ?
DB 4 DUP(?)
SUM DW ?
MSG1 DB 'INPUT 9;SUM IS $'
DATA ENDS
南通大学计算机科学与技术学院上机实验报告
课程名称:微机原理
年级:
上机日期:
姓名:
学号:
班级
实验名称:综合程序设计
教师:
成绩:
一、目的及要求
通过键盘输入一个数字,求1加到该数的和,并将结果显示在屏幕上。
1、数据段定义:
DATA SEGMENT
N DB 4
DB ?
DB 4 DUP(?)
SUM DW ?
MSG1 DB 'INPUT A NUMBER:$'
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:MOV AX,DATA
MOV DS,AX
LEA DX,MSG1

微机原理实验报告

微机原理实验报告

微机原理实验报告实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

二、实验内容将两个多位十进制数相加, 要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1.DATA2为首的5个内存单元中(低位在前), 结果送回DATA1处。

三、程序框图图3-1四、参考程序清单程序名: XIANGJ.ASMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END EQU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?) DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC N EARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP A D2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30H DEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五: 结果分析这次试验依次将相加数和被相加数存入AL, BL, 依次从低位向高位相加, 然后把结果放在内存中, 根据程序走向, 相加的结果依次放在内存地址DS:0000到DS:0004的位置上, 和我们实验预期结果一样。

输入任意长度两个数字(正负皆可),计算两个数字的和

输入任意长度两个数字(正负皆可),计算两个数字的和

#include<stdio.h>#include<string.h>void add(const char *num1,const char *num2,char *result){int lenth1=strlen(num1),lenth2=strlen(num2);int first1=num1[0];int first2=num2[0];int max=0;int min=0;int difference=0;int sum=0;int flag=0;int negative=0;intsavez=0;int zero=0;intaaa=0;if(lenth1>=lenth2){max=lenth1;min=lenth2;difference=max-min;}else{max=lenth2;min=lenth1;difference=max-min;}/*intaa='-';printf("%d\n",aa);*/if(first1==45&&first2==45) //先判断结果是否为负negative=1;else if(first1==45){if(lenth1>lenth2+1)negative=1;else if(lenth1==lenth2+1){for(int k=0;k<lenth2;k++)if(num1[k+1]>num2[k]){negative=1;break;}else if(num1[k+1]<num2[k])break;}}else if(first2==45){if(lenth1<lenth2-1)negative=1;else if(lenth2==lenth1+1){for(int k=0;k<lenth1;k++)if(num2[k+1]>num1[k]){negative=1;break;}else if(num2[k+1]<num1[k])break;}}elsenegative=0;if(negative==0) //当确定结果为正数时{for(inti=max-1;i>=0;i--) //当两个数的长度相等时{if(num1[0]!=45&&num2[0]!=45) //如果两个数都为正数{if(i>=difference){if(lenth1>=lenth2)sum=num1[i]-48+num2[i-difference]-48+flag;elsesum=num2[i]-48+num1[i-difference]-48+flag;}else{if(lenth1>=lenth2)sum=num1[i]-48+flag;elsesum=num2[i]-48+flag;}}else if(lenth1==lenth2-1||lenth2==lenth1-1) //如果其中一个数为负数,并且数字位数相等{if(i>=difference){if(lenth1<lenth2)sum=num1[i-difference]-num2[i]-flag;elsesum=num2[i-difference]-num1[i]-flag;if(sum<0){sum=10+sum;flag=1;}elseflag=0;}elsesum=45;}else if(first1==45) //第一个数为负数{if(i>=difference+1)sum=num2[i]-num1[i-difference]-flag;elsesum=num2[i]-48-flag;}else if(first2==45) //第二个数为负数{if(i>=difference+1)sum=num1[i]-num2[i-difference]-flag;elsesum=num1[i]-48-flag;}if(sum==45&&i==0){for(int j=0;j<max;j++){if(j==max-1)result[j]='\0';elseresult[j]=result[j+1];}}else if(sum>=10&&i==0){result[i]=sum-10+48;for(int j=max;j>=0;j--){result[j]=result[j-1];if(j==0)result[0]='1';}}else if(sum>=10){result[i]=sum-10+48;flag=1;}else if(sum<0){sum=10+sum;result[i]=sum+48;flag=1;}else{result[i]=sum+48;flag=0;}if(i==0&&result[0]=='0'){for(int k=0;k<strlen(result);k++){if(result[k]!='0'){zero=0;savez=k;break;}elsezero=1;}for(int j=0;j<strlen(result)-savez&&zero==0;j++) {result[j]=result[j+savez];if(j==strlen(result)-savez-1)result[j+1]='\0';}if(zero==1){result[0]='0';result[1]='\0';}}}}else if(negative==1){if(first1==45&&first2==45) //当两个数都为负数的时候{for(inti=max-1;i>=0;i--){if(i>=difference+1&&i!=0){if(lenth1>=lenth2)sum=num1[i]-48+num2[i-difference]-48+flag;elsesum=num2[i]-48+num1[i-difference]-48+flag;}else if(i<difference+1&&i!=0){if(lenth1>=lenth2)sum=num1[i]-48+flag;elsesum=num2[i]-48+flag;}if(sum>=10){result[i]=sum-10+48;flag=1;}else{result[i]=sum+48;flag=0;}if(i==0&&flag==1){result[0]='1';for(int j=max;j>=0;j--){if(j==0)result[j]='-';elseresult[j]=result[j-1];}result[max+1]='\0';}else if(i==0&&flag==0){result[0]='-';result[max]='\0';}}}else{for(inti=max-1;i>=0;i--){if(i>0){if(i>=difference){if(lenth1>=lenth2)sum=num1[i]-num2[i-difference]-flag;elsesum=num2[i]-num1[i-difference]-flag;}else{if(lenth1>=lenth2)sum=num1[i]-48-flag;elsesum=num2[i]-48-flag;}}elsesum=45;if(sum<0){sum=10+sum;flag=1;}elseflag=0;if(i==0)result[i]=sum;elseresult[i]=sum+48;if(i==1&&result[1]=='0'){for(int k=1;k<max;k++){if(result[k]!='0'){savez=k;break;}}for(int j=1;j<=max-savez;j++){result[j]=result[j+savez-1];if(j==max-savez)result[j+1]='\0';}}//printf("%d\t%d\t%d\t%d\n",sum,negative,max,result[i]);}result[max]='\0';}}//printf("%d\t%d\t%d\t%d\n",sum,negative,savez,zero); }void main(){char num1[100];char num2[100];scanf("%s%s",num1,num2);char result[100]={'0'};add(num1,num2,result);printf("%s\t%s\n",num1,num2);printf("%s\n",result);}。

实验二两个多位十进制数相加实验报告

实验二两个多位十进制数相加实验报告

南昌理工学院实验报告二O一二年月日课程名称:微机原理与接口技术实验名称:两个多位十进制数相加班级:姓名:同组人:指导教师评定:签名:【一、实验名称】两个多位十进制数相加【二、实验目的】1、熟悉DOS系统命令;学习数据传送和算术运算指令的用法。

2、熟悉在PC机上建立、汇编、链接、调试和执行汇编语言程序的过程。

3、初步练习用DEBUG调试程序运行8086汇编语言程序的过程。

【三、实验内容和原理】将两个5位十进制数相加。

要求被加数和加数均以ASCII码形式各自顺序存放在以DA TA1和DATA2为首地址的5个内存单元中(低位在前),结果送回DATA1处。

另外,程序利用DOS的9号调用功能完成将被加数、加数和最后的和在显示器上的显示。

【四、实验条件】微型计算机一台,软件MASM【五、实验过程】1、用编辑软件,输入以下汇编语言源程序:参考程序如下:data segmentdata1 db , , , , ,'$'data2 db , h, , , , '$'data endsstac segmentsta db 100 dup (?)stac endscode segmentassume cs:code, ds:data, ss:stac, es:datastart proc farpush dsxor ax, axpush axmov ax, datamov ds, axmov es, axmov ah, 9mov dx, offset data1int 21hmov ah, 2mov dl, '+'int 21hmov ah, 9mov dx, offset data2int 21hmov si, offset data1mov di, offset data2mov bx, 5push bxpush siconv1: and byte ptr[si+bx-1], 0fhand byte ptr[di+bx-1], 0fhdec bxjnz conv1mov cx, 5xor ax, axadd1: mov al, [si+4]mov bl, [di+4]adc al, blaaamov [si+4], aldec sidec diloop add1pop sipop bxconv2: or byte ptr[si+bx-1], 30hdec bxjnz conv2mov ah, 2mov dl, '='int 21hmov ah, 9mov dx, siint 21hretstart endpcode endsend start2.通过编译,连接形成可执行文件3.运行。

两个多位十进制数相加实验

两个多位十进制数相加实验

实验一两个多位十进制数相加实验一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程二、实验要求1 独立完成每个实验项目2 按照程序流程图编好实验程序三程序框图Array加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验二将键盘输入的小写字母转换成大写字母一实验目的了解小写字母和大写字母在计算机内的表示方法,学习如何转换二、实验要求1 独立完成每个实验项目2三程序框架加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验三输入字符一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验四8255A并行口实验一、实验目的加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。

二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。

三、实验原理PC口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。

拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。

程序:CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0073HIOAPT EQU 0070HIOBPT EQU 0071HIOCPT EQU 0072HIOBDATA EQU 0500HCONTPORT EQU 00DFHDATAPORT EQU 00DEHDATA1 EQU 0640HSTART: J MP IOLEDIOLED: CALL FORMATCALL LEDDISPMOV DS,AXMOV AL,82HMOV DX,IOCONPTOUT DX,ALMOV DX,IOBPTIN AL,DXMOV BYTE PTR DS:[0501H],ALMOV DX,IOCONPTMOV AL,80HOUT DX,ALMOV DX,IOBPTMOV AL,DS:[0501H]OR AL,0F0HOUT DX,ALMOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY1IOLED0: MOV AL,10100101BMOV DX,IOCPTOUT DX,ALCALL DELAY1CALL DELAY1OR AL,0F0HOUT DX,ALMOV CX,8HIOLED1: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,10101111BOUT DX,ALCALL DELAY2OR AL,01010000BOUT DX,ALCALL DELAY2LOOP IOLED1MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2MOV AL,01011010BOUT DX,ALCALL DELAY1CALL DELAY1OUT DX,ALMOV CX,8HIOLED2: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,01011111BOUT DX,ALCALL DELAY2OR AL,10100000BOUT DX,ALCALL DELAY2LOOP IOLED2MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2JMP IOLED0DELAY1: PUSH AXPUSH CXMOV CX,0030HDELY2: CALL DELAY2LOOP DELY2POP CXPOP AXRETDELAY2: PUSH CXMOV CX,8000HDELA1: LOOP DELA1POP CXRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+DATA1]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0640H],405BHADD BX,2MOV WORD PTR DS:[BX+0640H],4040HADD BX,2MOV WORD PTR DS:[BX+0640H],6D6DHADD BX,2MOV WORD PTR DS:[BX+0640H],7F5BHRETCODE ENDSEND START四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在实验机箱上连好实验线路3 观察实验现象4 分析实验结果实验五8259中断控制器实验一、实验目的1.掌握8259中断控制器的接口方法.2.掌握8259中断控制器的应用编程.二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。

2010汇编语言上机实验二

2010汇编语言上机实验二

;多字节BCD码乘2子程序 MULTI PROC LEA DI,BCDBUF+5 ;从低位开始 MOV CL,5 CLC MUL1: MOV AL,[DI] ;取BCD码 ADC AL,AL ;乘2 AAA ;十进制数运算校正 MOV [DI],AL ;存BCD码 DEC DI DEC CL JNE MUL1 RET MULTI ENDP COSEG ENDS END HEXBCD
汇编语言上机实验(二) 4学时
国家级计算机实验示范中心
实验二 数制、码制和子程序的编程与调试
一.实验目的: 实验目的: 1. 熟练掌握编写汇编语言原程序的基本方法和基本框架。 2. 熟练使用DEBUG调试程序。 3. 掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。 4. 掌握用DOS功能调用,实现字符的输入和显示。 5. 掌握子程序的编程与调试方法。 二.实验内容: 实验内容: 1、从键盘输入两个2位十进制正数转换成二进制数后,对这两个数进行相加相乘 运算,结果以十六进制数形式显示在屏幕上。 2、从键盘输入两个2位十进制正数转换成组合BCD码后,对这两个数进行相加 相乘运算,结果以十进制形式显示在屏幕上。 3、从键盘输入一个4位十进制正数并回显后,将其对应的十六进制数显示在屏幕 上。
实验要求一参考程序:
TITLE CONVERT HEXADECIMAL TO BCD DATA SEGMENT PROMPT DB "INPUT HEXADECIMAL(4DIGITS):$' HEXBUF DB 5,0,5 DUP(0) DISP DB 0AH,0DH BCDBUF DB 6 DUP(0),'$' DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1 HEXBCD: MOV AX,DATA MOV DS,AX

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加

计算机硬件实验室实验报告课程名称:微机原理及应用
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
源代码:
Mov AH,1
Int 21H
Mov BH, AL
Mov AH,1
AND Bh, 0fH
Int 21h
Mov BL,AL
AND Bl, 0fH
Mov DL, '+'
Mov AH, 2
Int 21h
MOV AH, 1
INT 21H
Mov CH,AL
AND CH, 0fH
Mov AH, 1
INT 21H
Mov CL,AL
AND CL, 0fH
ADD BL, CL
Mov Al,BL
Mov AH,00H 四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
结论如上图
五.结论
本次实验完成了简单的两个两位十进制数相加。

完成了表达式的输出,将实验跟理论相结合,加深了对知识的理解。

AAA Mov Bl,Al ADC BH,CH Mov AL,BH Mov AH,00H AAA Mov CH,AH Mov CL,Al ADD BL, 30H ADD CX, 3030H Mov DL, '=' Mov AH, 2 Int 21H Mov DL,CH Mov AH, 2 Int 21H Mov DL, CL Mov AH, 2 Int 21H Mov DL,BL Mov AH, 2 INT 21H。

南华大学微机原理汇编实验5键盘上输入两个数求和

南华大学微机原理汇编实验5键盘上输入两个数求和

南华大学微机原理汇编实验5键盘上输入两个数求和
.
.' 微机原理实验 5 一位带符号数加法的汇编语言程序设计
班级学号姓名
实验时间:年月日实验成绩:
1.实验目的
从键盘上输入两个数(数的大小在±9之间),然后在屏幕上显示两数之和(结果在±18之间)。

完成创建源程序文件,汇编,连接,运行,实验结果显示。

2.实验原理
3.实验仪器设备
4.实验过程
5.实验结果
DSEG SEGMENT
s1 db ' please input the first number ','$'
s2 db 10,13, ' please input the second number ','$'
s3 db 10, 13, ' the sum is ','$'
s4 db 10, 13, ' there are input errors ','$'
d1 db ?
d2 db ?
d3 db ' ','$'
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG
MAIN PROC FAR
mov ax, dseg
mov ds, ax
mov bl,0
mov cl,0
mov ah,9h 上一页下一页。

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加实验目的:了解和掌握两位十进制数相加的原理和方法,熟悉数字电路的组成和工作原理。

实验器材:数字计算器、示波器、两位十进制加法器。

实验原理:在计算机中,数字电路是基础。

而十进制数相加是数字电路中最基本的运算之一、十进制数可以用二进制数表示,通过逻辑门和添加器电路可以实现十进制数的加法运算。

十进制数是由0~9这10个基本数字组成。

每一位都有从0到9的取值范围。

当两位十进制数相加时,需要对个位、十位等位上的数字进行相加,并向高一位进位。

具体的加法过程可以通过数字电路来实现。

一个两位十进制数相加的示例:23+56首先从个位数开始相加,3+6=9,个位上的结果是9;然后从十位数开始相加,2+5=7,十位上的结果是7;将个位和十位上的结果合并,得到最终结果79实验步骤:1.准备好实验器材,确保电路连接的正确性。

2.输入两个需要相加的两位十进制数,例如23和56,将这两个十进制数转化为二进制数。

3.将两个二进制数输入到相应的输入端口,将输入数送入两位十进制加法器。

4.确认输入数的有效性,检查输入数的范围是否符合要求。

5.等待计算器输出结果,结果以二进制数的形式表示。

6.确认结果的正确性,将输出数转化为十进制数。

7.对比计算结果与预期结果,分析原因。

实验结果:输入数:23、56预期结果:79实际结果:79分析和讨论:在本次实验中,我使用了两位十进制加法器,将两个两位十进制数相加。

实验结果显示,实际结果与预期结果一致,说明实验顺利完成。

通过这个实验,我了解到了两位十进制数相加的原理和方法。

在实际应用中,十进制数相加往往需要通过数字电路来实现。

对于更高位数的十进制数相加,可以通过级联多个十进制加法器来实现。

总结:通过本次实验,我掌握了两位十进制数相加的原理和方法,了解了数字电路的组成和工作原理。

继续深入学习和实践,在实际应用中灵活运用数字电路知识,将有助于提高计算和运算效率。

实验2两个两位十进制数相加

实验2两个两位十进制数相加

(2)非压缩的BCD码调整指令 ● AAA ● AAS 加法的ASCII码调整指令 减法的ASCII码调整指令
● AAM
● AAD
乘法的ASCII码调整指令
除法的ASCII码调整指令
DAA 加法的十进制调整指令 格式:DAA 执行操作: (AL) 把AL中的和调整到 组合的BCD码格式 说明:执行该指令前必须执行ADD或ADC指令,加法 指令必须把两个组合的BCD 码相加,并把结果存放在 AL寄存中。
四、源程序(加注释) 五、实验步骤 写出上机操作的具体步骤,每一步要求仅写出具体 命令,屏幕显示信息不用写。 提示:生成EXE文件后,将EXE文件调入DEBUG调 试,用U命令查看MOV AX,XXXX(DATA)语句,即 得数据段段地址XXXX。 用G命令运行后,用D XXXX:0000 L3命令检查 DATA1、DATA2和DATA3单元的内容,要求把屏幕 显示的结果写出来,然后对实验结果进行分析,看 结果是否正确(写出在DEBUG环境下调试程序的具 体步骤)。
数字的 ASCII 码是一种 非压缩的 BCD 码 DIGIT ASCII BCD 0 30H 0011 0000 1 31H 0011 0001 2 32H 0011 0010 … … … 9 39H 0011 1001
(1)压缩的BCD码调整指令
● DAA
● DAS
加法的十进制调整指令
减法的十进制调整指令
MOV
SUB
AL, 54H
AL, 39H ; (AL)=3BH
DAS
; (AL)=3BH-06H=35H
AAA 加法的ASCII调整指令 格式:AAA 执行操作: (AL) 把AL中的和调整到 未组合的BCD码格式
说明:执行该指令前必须执行ADD或ADC指令,加 法指令必须把两个未组合的BCD码相加,并把结果 存放在AL寄存中。 指令的调整步骤: (1)如AL寄存器中的低4位在十六进制数A~F之间或 AF为1,则 AL寄存器的内容加6,AH寄存器的内容加 1,并将AF位置1,CF位置1 (2)清除AL寄存器的高4位

微机原理实验 数据传送及两个多位十进制数相加

微机原理实验 数据传送及两个多位十进制数相加

深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:数据传送及两个多位十进制数相加学院:专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制一、实验名称:数据传送及两个多位十进制数相加二、实验目的(1)学习数据传送和算术运算指令的用法。

(2)熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。

三、实验内容将两个多位十进制数相加。

要求被加数均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。

四、实验电路及连线(硬件实验)此实验属于软件实验,故无硬件实验的电路及连线。

五、程序说明(预习)包括程序功能,程序框图,算法说明及所用到的寄存器等。

功能:将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。

算法说明:①定义数据段:定义被加数和加数,且要使其用ASCII码以十六进制之间的转换;②定义堆栈段,并给SP_TOP单元赋初值0;③定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。

④程序结束。

所用到的寄存:AX、SS 、CS 、DS、 ES、SI、SP、DI程序框图:开始显示加数和被加数加数和被加数以ASCⅡ码表示的数字串形式转化为由十六进制表示的数字串形式赋计数值给CX清除最低位进执行ADC带进位相加AAA调整结果送被加数区调整偏移量显示加数和被加数CX-1=0十六进制结果转化为ASCⅡ显示结果结束六、源程序清单(预习);DATAS SEGMENT ;数据段DATA1 DB 33H,32H,38H,34H,37H ;定义DATA1为被加数DATA2 DB 34H,35H,39H,37H,31H ;定义DATA2为加数DATAS ENDSSTACKS SEGMENT ;堆栈段STA DB 64 DUP(0) ;为STA预留64个字节的存储空间SP_TOP DB 0 ;定义SP_TOP单元的数值为0 STACKS ENDSCODES SEGMENT ;代码段ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX ; 设置数据段MOV AX,STACKSMOV SS,AX ; 设置堆栈段LEA SP,SP_TOP ; 设置栈顶指针MOV SI,OFFSET DATA1 ;把DATA1偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示被加数CALL CRLF ; 回车、换行MOV SI,OFFSET DATA2 ; 把DATA2偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示加数CALL CRLF ; 回车、换行MOV DI,OFFSET DATA1 ; 把DATA1偏移量地址赋予DICALL ADDA ;调用ADDA子程序,实行加法运算MOV BX,05CALL DISPL ; 显示结果CALL CRLF ; 回车、换行MOV AX,4C00H ;INT 21H ;调用DOS21H功能,返回CRLF PROC NEAR ;回车、显示功能过程定义,属性为NEAR MOV DL,0DH ;把回车的ASCII码0DH传给DLMOV AH,02H ;送DOS 的中断调用功能号INT 21H ; DOS 的中断调用MOV DL,0AH ; 把换行的ASCII码0AH传给DLMOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用RET ; 返回CRLF ENDP ;完成过程定义DISPL PROC NEAR ;显示功能过程定义,属性为NEARDSL: MOV AH,02 ;送显示功能号MOV DL,[SI+BX-1] ;显示字符串中一字符INT 21H ; DOS 的中断调用DEC BX ;BX减1,修改偏移量JNZ DSL ;如果BX未减到零,跳到DSL执行指令RET ;返回DISPL ENDP ;完成显示功能子程序定义ADDA PROC NEAR ;实行加法运算子程序过程定义,属性为NEAR MOV DX,SIMOV BP,DIMOV BX,05TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把ASCII码数转化为十六进制SUB BYTE PTR[DI+BX-1],30HDEC BX ;BX减1,修改偏移量JNZ TRAN_HEX ;如果BX未减到零,跳到TRAN_ HEX执行指令MOV SI,DXMOV DI,BPMOV CX,05 ; 包括进位,共5位CLC ;进位标志位CF清零(clear carry flag)THE_ADD: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ; 带进位相加,把结果存在AXAAA ;进行AAA调整,非结合BCD码的加法调整MOV [SI],AL ; 结果送被加数区INC SI ;SI加1INC DI ;DI加1(指向下一位)LOOP THE_ADD ;循环MOV SI,DXMOV DI,BPMOV BX,05TRAN_ASCI: ADD BYTE PTR[SI+BX-1],30HADD BYTE PTR[DI+BX-1],30H ;使用PTR转换属性并相加,将十六进制数转化为ASCII表示DEC BX ; BX减1,修改偏移量JNZ TRAN_ASCI ; 如果BX未减到零,跳到TRAN_ASCIRET ;返回ADDA ENDP ;加法子程序定义完成CODES ENDS ;代码段完成END START七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:E:\masm\实验三\l3.asm2.可执行程序路径及文件名:E:\masm\实验三\l3.exe;八、上机调试情况说明1.上机调试步骤A.通过dos对pts3.asm文件进行操作。

汇编循环程序求累加和

汇编循环程序求累加和

两个汇编程序(求累加和):第一题:从键盘输入一个十进制数n,计算1+2+3+4+……+n=sum,并以此格式输出。

(结果超过65535时会溢出)代码:DA TA SEGMENTINF1 DB "Please Input a Number (0~65535):$"IBUF DB 7,0,6 DUP(?)OBUF DB 6 DUP(?)STRING DB "1+2+......+$"ZHONGZHI DB 6 DUP(?)GES DW ?SUM DW ?MD DW 0DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET INF1 ;输出提示语句MOV AH,09HINT 21HMOV DX,OFFSET IBUF ;从键盘输入一个十进制数n(字符串)命令MOV AH,0AHINT 21HMOV CL,IBUF+1 ;将输入的串转换为数值存于AX中MOV CH,0MOV SI,OFFSET IBUF+2MOV AX,0AGAIN:MOV DX,10MUL DXAND BYTE PTR [SI],0FHADD AL,[SI]ADC AH,0INC SILOOP AGAINMOV GES,AX ;保存输入的n;计算过程:1+2+3+…..+nMOV CX,AXMOV MD,1LOOP1:ADD AX,MDINC MDLOOP LOOP1MOV SUM,AXSHUCHU:MOV DL,0AH ;换行输出MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DX,OFFSET STRING ;输出“1+2+......+ ”MOV AH,09HINT 21HMOV AX,GESMOV BX,OFFSET ZHONGZHI+5MOV BYTE PTR[BX],'$'MOV CX,10LOOP2:MOV DX,0DIV CXADD DL,30HDEC BXMOV [BX],DLOR AX,AXJNZ LOOP2MOV DX,BXMOV AH,09HINT 21H;输出“=”MOV DL,'='MOV AH,2INT 21HMOV AX,SUMMOV BX,OFFSET OBUF+5MOV BYTE PTR[BX],'$'MOV CX,10LOOP3:MOV DX,0DIV CXDEC BXMOV [BX],DLOR AX,AXJNZ LOOP3MOV DX,BXMOV AH,09HINT 21HFINISH:MOV AH,4CH ;结束INT 21HCODE ENDSEND START结果截屏:╬┤└┤╗π▒α ╓╨╬─╤º╧░░µ 1.00Please Input a Number (0~65535):1001+2+......+100=5050Press any key to continue . . .第二题:从1+2+3+……一直累加,当结果大于6000时结束,并输出结果:1+2+3+……+n=sum 代码:DA TA SEGMENTINF1 DB 0AH,0DH,"Please Input a Number (0~65535):$"STRING DB 0AH,0DH,"1+2+......+$"IBUF DB 7,0,6 DUP(?)GESHU DB 6 DUP(?)JIEGUO DB 6 DUP(?)SUM DW ?MD DW 0DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING ;换行输出“"MOV AH,09HINT 21HMOV AX,0 ;计算过程1+2+3+......直到结果大于60000 MOV MD,1LOOP1:ADD AX,MDINC MDCMP AX,60000JBE LOOP1MOV SUM,AXMOV AX,MD ;输出个数(加到多少为止)MOV BX,OFFSET GESHU+5MOV BYTE PTR[BX],'$'MOV CX,10LOOP2:MOV DX,0DIV CXADD DL,30HDEC BXMOV [BX],DLOR AX,AXJNZ LOOP2MOV DX,BXMOV AH,09HINT 21HMOV DL,'=' ;输出“=”MOV AH,2INT 21HMOV AX,SUM ;输出总和MOV BX,OFFSET JIEGUO+5MOV BYTE PTR[BX],'$'MOV CX,10LOOP3:MOV DX,0DIV CXADD DL,30HDEC BXMOV [BX],DLOR AX,AXJNZ LOOP3MOV DX,BXMOV AH,09HINT 21HFINISH:MOV AH,4CH ;结束INT 21HCODE ENDSEND START结果截屏:╬┤└┤╗π▒α ╓╨╬─╤º╧░░µ 1.001+2+......+347=60031Press any key to continue . . .。

微机实验之两32位数求和

微机实验之两32位数求和

微机实验之两32位数求和model small.386.dosseg.stack 1024.data;DATA1 dd 81234567hDATA1 dd 7fffffffh; 最大正数DATA2 dd 80000000h; 最小负数;DATA2 dd 1234;SUM dd ?.code.startupmov eax, DATA1add eax, DATA2jo OverFlowjmp DoneOverFlow:cmp DATA1, 0jg PlusOverFlowmov eax, 80000000h ;最小负数jmp DonePlusOverFlow:mov eax, 7fffffffh ;最大正数Done:mov SUM, eax.exitend1.一个正数和一个负数相加,结果肯定不会溢出,即结果既不会大于最大正数,也不会小于最小负数;同样道理,两个正数或两个负数相减,结果肯定也不会溢出。

另外还有一种特殊情况,即当DATA1为0,DATA2为最小负数的时候,DATA1 - DATA2也会溢出。

2. 若结果大于最大正数,肯定是两个正数相加;若结果小于最小负数,则肯定是两个负数相加;3. 溢出标志只能判断是否溢出,而不能判断是正溢出,还是负溢出。

所以应该先判断OF标志位,若有溢出,接着判断DATA1或者是DATA2的符号,若为正数,则为正溢出;否则为负溢出。

dseg segment;DATA1 dd 81234567hDATA1 dd 7fffffffh; 最大正数DATA2 dd 80000000h; 最小负数 ;DATA2 dd 1234; 最小负数SUM dd ?dseg endscseg segmentassume cs:cseg, ds:dseg start:mov ax, dsegmov ds, axmov ax, word ptr DATA1mov bx, word ptr DATA2mov dx, word ptr [DATA1 + 2] mov cx, word ptr [DATA2 + 2]add ax, bxadc dx, cxjo OverFlowjmp DoneOverFlow:cmp word ptr [DATA1 + 2], 0 jg PlusOverFlowmov dx, 8000hmov ax, 0 ;最小负数jmp DonePlusOverFlow:mov dx, 7fffhmov ax, 0ffffh ;最大正数Done:mov word ptr SUM, axmov word ptr [SUM + 2], dxmov ah, 4chint 21hcseg endsend start。

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

微机原理实验5 一位带符号数加法的汇编语言程序设计
班级学号姓名
实验时间:年月日实验成绩:
1.实验目的
从键盘上输入两个数(数的大小在±9之间),然后在屏幕上显示两数之和(结果在±18之间)。

完成创建源程序文件,汇编,连接,运行,实验结果显示。

2.实验原理
3.实验仪器设备
4.实验过程
5.实验结果
DSEG SEGMENT
s1 db ' please input the first number ','$'
s2 db 10,13, ' please input the second number ','$'
s3 db 10, 13, ' the sum is ','$'
s4 db 10, 13, ' there are input errors!!!!! ','$'
d1 db ?
d2 db ?
d3 db ' ','$'
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG
MAIN PROC FAR
mov ax, dseg
mov ds, ax
mov bl,0
mov cl,0
mov ah,9h
lea dx,s1
int 21h ;显示字符串1 mov ah,1
int 21h
cmp al,2dh
jnz m1
mov bl,1
mov ah,1
int 21h
m1: mov [d1],al ;读入第一个数
mov ah,9h
lea dx,s2
int 21h ;显示字符串2
mov ah,1
int 21h
cmp al,2dh
jnz m2
mov cl,1
mov ah,1
int 21h
m2: mov [d2],al ;读入第二个数
call subp
mov al,[d1]
call subp
cmp cl,bl
jnz btfh
mov al,[d2]
add al,[d1]
sub al,30h
cmp al,39h
jna mm
add al ,6
mov [d3+1],31h
sub al,10h
mm: mov [d3+2],al
cmp bl,1
jz fh
jmp zhh
btfh: mov al,[d1]
cmp al,[d2]
jna mk
sub al,[d2]
add al,30h
mov [d3+1],al
cmp bl,1
jz fh
jmp zhh
mk: mov al,[d2]
sub al,[d1]
add al,30h
mov [d3+1],al
cmp cl,1
jz fh
jmp zhh
fh:mov [d3],2dh zhh: mov ah,9h
lea dx,s3
int 21h ;显示字符串3
mov ah,9h
lea dx,d3
int 21h
mov ah,1 ;以下退出
int 21h
mov ax,4c00h
int 21h
MAIN ENDP
subp proc
cmp al,30h
jb k1
cmp al,39h
ja k1
jmp m9
k1: mov ah,9h
lea dx,s4
int 21h
m9: ret
subp endp
CSEG ENDS
END MAIN
(注:文档可能无法思考全面,请浏览后下载,供参考。

可复制、编制,期待你的好评与关注!)。

相关文档
最新文档