汇编上机实验.doc_第1页
汇编上机实验.doc_第2页
汇编上机实验.doc_第3页
汇编上机实验.doc_第4页
汇编上机实验.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

从键盘接收两个不大于5 的十进制数字,并以十进制数据形式显示其和。 编程提示: 该程序中要求的均为一位数据的输入输出,暂时不考虑多位数据,请输入05 之间的数据,显示的结果为09。请不要输入两个5,以免出现不能直接输出的情况。 data segmentdata endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,axmov ah,01hint 21hmov bl,alsub bl,30h ;将输入的数字变成16进制数后放在bl中 ;为了实现bl与cl的16进制数相加mov dl,10 ;换行(10表示换行)mov ah,02hint 21h ;mov dl,13 ;回车(13表示回车,为的是让换行之后光标移到行首);mov ah,02h;int 21hmov ah,01hint 21hmov cl,alsub cl,30h;将输入的数字变成16进制数后放在cl中mov dl,10mov ah,02hint 21h;mov dl,13;mov ah,02h;int 21hadd cl,bladd cl,30hmov dl,clmov ah,02hint 21h mov ax,4c00h int 21hcode ends end start 1、试编写程序,完成下面公式的计算。 A (X-Y+24)/ Z的商,B (X-Y+24)/ Z的余数 其中,变量X和Y是32位有符号数,变量A、B、Z是16位有符号数。 DATA SEGMENTX DD 12345HORG 10HY DD 12345HORG 20HZ DW 12HORG 30HA DW ?B DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,WORD PTR X;将X低四位放入AX中MOV DX,WORD PTR X+2;将X高四位放入DX中SUB AX,WORD PTR Y ;X和Y的低四位相减(不考虑借位)SBB DX,WORD PTR Y+2 ;X和Y的高四位相减(考虑借位)ADD AX,24ADC DX,0;只是将进位 加入到DX中IDIV ZMOV A,AX;存放商到AMOV B,DX;存放余数到BMOV AX,4C00HINT 21HCODE ENDSEND START2 、试将字节数据B1 拆分成两个半字节数据,分别存放于其后两个单元X 和Y 中。 编程提示: 数据段定义应包含B1、X、Y 三个变量,其中B1 变量自定义具体的数值,X、Y 变量的数值由程序赋值,分别是B1 的高低半个字节。该程序中需要使用逻辑操作完成半字节数据的拆分。 DATA SEGMENT B1 DB 12H X DB ? Y DB ?DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AL,B1MOV CL,4SHR AL,CLMOV X,ALMOV AL,B1AND AL,0FHMOV Y,ALMOV AX,4C00HINT 21HCODE ENDS END START 1、试编写程序,完成以下功能。 (1)程序执行时,显示提示信息“Please input a string(length9):”,由用户输入一个长度小于9的字符串; (2)然后显示提示信息“Please input the index of the char to display:”,请用户指定该串中的某个字符的位置号; (3)程序将用户指定位置的字符显示出来。 例如:用户输入一个字符串“ABCDEFG”,然后指定的位置号为2,则屏幕显示字符“C”。注意:这里的位置号从0开始。 注意:以上功能的实现不要求程序做控制判断,在字符串输入时,由人为控制字符串长度小于9;在指定位置号时,由人为控制输入的位置号是合法的。 2、试使用分支结构和循环结构程序完善上面的程序功能。 (1)对用户输入的字符串进行长度检查,若长度大于9,则要求用户重新输入; (2)用户在指定位置号时,进行判断,若输入非法(位置号大于实际字符串长度),则提示用户重新输入; (3)统计用户输入的字符串中特定字符的数目并显示。可先指定特定字符进行统计,然后再由用户指定字符进行统计。 DATA SEGMENT INMESS DB Please input a string(length9):$ TIPSMESS DB Please input the index of the char to display:$ STR1 DB 20,?,20 DUP($) X DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATA MOV DS,AXL1:LEA DX,INMESSMOV AH,09HINT 21H;提示输入字符串 LEA DX,STR1 MOV AH,0AH INT 21H ;输入字符串MOV DL,10MOV AH,02HINT 21HMOV DL,13MOV AH,02HINT 21H ;换行回车 CMP STR1+1,8 JA L1;比较输入的字符串长度是否大于8L2:LEA DX,TIPSMESSMOV AH,09HINT 21H ;提示输入位置MOV AH,01HINT 21H ;输入位置SUB AL,30HMOV CL,ALMOV DL,10MOV AH,02HINT 21HMOV DL,13MOV AH,02HINT 21H ;换行回车mov bl,str1+1DEC blCMP CL,blJA L2;判断指定位置是否超出MOV BL,CLMOV BH,0MOV AL,STR1BX+2MOV DL,ALMOV AH,02HINT 21Hmov dl,10mov ah,02hint 21hmov ah,01hint 21hXOR CX,CXMOV CL,str11MOV BX,-1MOV DL,0l3: inc bxcmp al,str1bx+2jnz l4inc dll4:LOOP l3ADD DL,30HMOV CL,DLMOV DL,0AH;回车换行MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,CLMOV AH,2INT 21H MOV AX,4C00H INT 21HCODE ENDSEND START实验四: 1、已知无符号字数组LIST 的第一个字数据为其元素个数,其后数据按由小到大的顺序保存。试将某无符号字数据X 插入数组LIST 的正确位置,并修改元素个数。 编程提示: 该程序中要将X 插入递增数组,需要和数组中每一个数据值进行大小比较,找到合适位置保存X。 数据比较的方式: (1)从前向后比较:找到小于X 的数据后,移动该数据及其后面的所有元素,将X 存放到腾出的单元中; (2)从后向前比较:找到大于X 的数据后,直接将该数据向后移动一个数据的位置, 直到找到小于X 的数据,将X 保存到当前空出位置上程序如下:DATA SEGMENT LIST DW 5,12,13,15,16,17ORG 20H A1 DW 14DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX,DATA MOV DS,AXMOV AX,A1 MOV CX,LISTMOV BX,CXADD BX,BXBEGIN: MOV DX,LISTBX CMP AX,DX JA LP MOV LISTBX+2,DXLP1: sub BX,2 LOOP BEGINLP: MOV LISTBX+2,AX ADD LIST,1 MOV AX,4C00H INT 21HCODE ENDSEND START 2、试用子程序实现以下要求。 题目:从键盘接收若干个一位十进制数值(09),并以十进制数据形式显示其和。 要求:(1)用子程序实现一位十进制数值的输入; (2)当用户未输入数值,直接回车时,结束输入; (3)输出的数据为多位十进制数据,而机器内部计算的和是十六进制形式,需要进行 数制转换,然后以字符串的形式输出结果; (4)程序中要求有必要的提示信息。 例如:用户在提示信息下输入三个数值: Please input a number:5 Please input a number:3 Please input a number:4 程序显示运算结果 The sum is:12 3、试用子程序改进以上题目。 题目:从键盘接收若干个N位的十进制数值(065535),并以二进制、十进制、十六进制三种数制形式显示其和(假定多个数据和不超过65535)。 要求:(1)用子程序实现一个N位十进制数值的输入,在主程序的循环结构中调用该子程序; (2)当用户未输入数值,直接回车时,结束输入; (3)输出的数据为多位十进制数据,而机器内部计算的和是十六进制形式,需要进行数制转换,然后以十进制字符串的形式输出结果; (4)程序中要求有必要的提示信息。 例如:用户在提示信息下输入三个数值: Please input a number:15 Please input a number:30 Please input a number:45 程序显示运算结果 The sum is:0101 1010B 90D 5AH 程序如下:DATA SEGMENTX DW 0NUM DB 6, ? ,6 DUP($)STR1 DB Please input a number:$STR2 DB The sum is: $sumB DB 20,0,20 DUP($)sunD DB 20,0,20 DUP($)sumH DB 20,0,20 DUP($)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX , DATA MOV DS , AXCALL INPUTNUMLEA DX,STR2 ;输出结果MOV AH,09HINT 21HCALL getTwo;二进制表示CALL getTen;十进制CALL getSixtin;十六进制表示 MOV AX , 4C00H INT 21H;功能,多个多位十进制数的输入,并且实现了这几个数的数值相加;实际上这个是两个循环嵌套,;入口参数:NUM;出口参数:X (X是多个数据相加之后的和,字数据,之后可以除以2、10、16,依次转化相应进制)INPUTNUM PROCPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIAGAIN:LEA DX,STR1;提示输入信息 MOV AH,09HINT 21H LEA DX,NUMMOV AH,0AHINT 21HCALL CHANGECMP NUM2,0DHJZ exit;初始化操作,以下内嵌套的循环是要将接受的多位十进制数转化为与之相对应的值mov si,0;串指针初始化mov bx,10;基数10,乘数mov ax,0;累加结果初值mov cl,num+1mov ch,0;cx是循环的次数jcxz LP1;若串长度为0,直接跳过此内循环LP: mul bxmov dl,numsi+2sub dl,30hmov dh,0add ax,dxinc siloop LPLP1: add x,axJMP AGAIN;外循环,接收多个数据exit:POP SIPOP DXPOP CXPOP BXPOP AXRETINPUTNUM ENDP ;名字:CHANGE;功能:回车换行CHANGE PROCPUSH DXPUSH AX MOV DL,0AH;回车换行 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21HPOP DXPOP AXRETCHANGE ENDP;功能:将二进制数输出;入口参数:X;出口参数:getTwo PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,2MOV BX,2MOV AX,XMOV sumB1,0LP:MOV DX,0DIV CX;商在AX,余数在DX中MOV sumBBX,DLINC BXINC sumB1;记录长度CMP AX,0JA LP;倒序输出XOR CX,CXMOV CL,sumB1MOV BX,CXAGAIN: MOV DL,sumBBX+1ADD DL,30HMOV AH,02HINT 21HDEC BXLOOP AGAINMOV DL,BMOV AH,02INT 21HMOV DL, MOV AH,02INT 21HPOP DXPOP CXPOP BXPOP AXRETgetTwo ENDP;功能:将十进制数输出;入口参数:X;出口参数:getTen PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,10MOV BX,2MOV AX,XMOV sunD1,0LP:MOV DX,0DIV CX;商在AX,余数在DX中MOV sunDBX,DLINC BXINC sunD1;记录长度CMP AX,0J

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论