汇编语言作业答案_第1页
汇编语言作业答案_第2页
汇编语言作业答案_第3页
汇编语言作业答案_第4页
汇编语言作业答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、第一题:源程序:;从屏幕上输入大写字母,转换为小写字母并输出(生成.com文件);要求:程序具有可读性、容错性homework1 segment para assume cs:homework1,ss:homework1,ds:homework1org 0100hmain proc far lea dx, str1mov ah, 09hint 21h ;显示输入提示main0:mov ah, 01h ;输入字符int 21hcmp al, 41h ;输入判断jb main1cmp al, 5ah ja main1lea dx, str4 ;显示输入成功提示 mov ah, 09h int 21

2、hadd al, 20h ;大写字母的ASCII->小写字母的ASCII push axlea dx, str2 ;显示输出提示mov ah, 09hint 21hpop axmov dl, al mov ah, 02h ;显示小写字母int 21hmov ax, 4c00h ;退出OSint 21hmain1: ;错误提示 lea dx, str3mov ah, 09h int 21h jmp main0 main endpstr1 db 0dh,0ah,'Please input a bigcase character:$'str2 db 0dh,0ah,'T

3、he converted result is:$'str3 db 0dh,0ah,'There is a input error, please input again!$'str4 db 0dh,0ah,'The character you have inputed is right!$'homework1 ends end main运行结果:第二题:源程序:;编写一子程序asc2bin,将ASCII转换为二进制数;要求:输入参数:AL中存放需要转换的ASCII; 输出参数:AL中存放转换后的二进制数并返回data segment para var d

4、b 31h,39h,46hbuf db 3 dup (0)data endsss_seg segment stack db 100 dup (0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc far mov ax, data ;数据段赋值mov ds, axmov bx, 0mov al, varbxcall asc2binmov bufbx, alinc bxmov al, varbxcall asc2binmov bufbx, alinc bxmov al, varbxcall asc2binm

5、ov bufbx, almov ax, 4c00hint 21h ;编写一个把ASCII转换为二进制数的子程序;入口参数:AL中存放需要转换的ASCII ;出口参数:AL中存放转换后的二进制数并返回asc2bin proc sub al, 30hcmp al, 09hjbe main1sub al, 07hmain1:retasc2bin endpmain endpcode ends end main运行结果:第三题:源程序:;内存中存放8个16位有符号数,求8个数值之和,并将结果存放在内存变量SUM中;注:程序中应用到字扩展为双字的指令CWDdata segment para buf dw

6、12000,-14586,28965,-31596,14896,25478,32145,-26987sum dd 0data endsss_seg segment stack dw 100 dup(0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc farmov ax, data ;数据段赋值mov ds, axmov cx, 8 ;设置循环次数mov bx, 0circle:mov ax, bufbxcwd ;ax->dx,axadd word ptr sum, axadc word ptr

7、sum+2, dxadd bx, 2loop circlemov ax, 4c00hint 21hmain endpcode ends end main运行结果:第四题:源程序:;内存中存放8个8位有符号数,请按从大到小顺序排列data segment para buf db -128,127,-112,123,-109,112,0,64count equ ($-buf)data endsss_seg segment stack db 100 dup(0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc

8、 farmov ax, data ;对数据段赋值mov ds, axmov cx, count-1 ;定义最多的外循环次数circle2: ;外循环mov bx, 0mov dx, 0 ;设置标志push cx ;保存外循环的CXcircle1: ;内循环mov al, bufbxcmp al, bufbx+1jge main1xchg al, bufbx+1mov bufbx, almov dx, 1main1:add bx, 1loop circle1pop cxcmp dx, 0 ;判断标志,进一步判断是不是继续执行外循环jz exitloop circle2exit: ;退出OSmov

9、 ax, 4c00hint 21hmain endpcode ends end main运行结果:第五题源程序:;内存中有8个16位数,请编写程序将8个数倒序排放data segment para buf dw 14785,10596,9658,-21589,0,6365,-4852,5812data endsss_seg segment stack dw 100 dup(0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc farmov ax, data ;数据段赋值mov ds, ax mov cx

10、, 4 ;设定循环次数mov bx, 0main1:mov ax, bufbxmov si, 14sub si, bxxchg ax, bufsimov bufbx, axadd bx, 2loop main1mov ax, 4c00hint 21hmain endpcode ends end main运行结果:第六题:源程序:;从键盘输入4位十进制数,然后以16进制形式显示在屏幕上.;要求:键盘输入和显示结果时均应有提示data segment para str1 db 0dh,0ah,'Please input a four decimal number:$'str2 db

11、 0dh,0ah,'The fexadecimal form of the number you have inputed is:$'data endsss_seg segment stack db 100 dup (0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc far mov ax, data ;数据段赋值 mov ds, ax lea dx, str1 mov ah, 9 int 21h ;显示输入提示 mov ah, 1 ;输入千位 int 21h sub al, 30h

12、;得到千位数 mov ah, 0 mov bx, 10 mov cx, 3 ;千位乘10的次数 circle1: mul bx ;得到千位数*1000 loop circle1 push ax ;保存得到的千位数*1000 mov ah, 1 int 21h ;输入百位 sub al, 30h ;得到百位数 mov ah, 0 mov cx, 2 ;百位乘10的次数 circle2: mul bx ;得到千位数*1000 loop circle2 mov dx, ax ;保存得到的百位数*100 pop ax ;千位数*1000出栈 add ax, dx ;千位数*1000+百位数*100-&

13、gt;ax push ax mov ah, 1 int 21h ;输入十位数 sub al, 30h ;得到十位数 mov ah, 0 mul bx ;得到十位数*10 mov dx, ax pop ax ;千位数*1000+百位数*100出栈 add ax, dx ;得到千位数*1000+百位数*100+十位数*10 push ax ;千位数*1000+百位数*100+十位数*10->入栈 mov ah, 1 int 21h ;输入个位数 sub al, 30h ;得到个位数 mov ah, 0 mov dx, ax pop ax add ax, dx ;得到千位数*1000+百位数*

14、100+十位数*10+个位? push ax lea dx, str2 mov ah, 9 int 21h ;显示输出提示 pop ax push ax mov al, ah mov cl, 4 shr al, cl ;得到AH的高四位 call convert ;得到AH的高四位所对应的ASCII call putchar ;显示AH的高四位所对应的ASCII对应的字符 pop ax push ax mov al, ah call convert ;得到AH的低四位所对应的ASCII call putchar ;显示AH的低四位所对应的ASCII对应的字符 pop ax push ax sh

15、r al, cl ;得到AL的高四位 call convert ;得到Al的高四位所对应的ASCII call putchar ;显示Al的高四位所对应的ASCII对应的字符 pop ax call convert ;得到Al的低四位所对应的ASCII call putchar ;显示Al档低四位所对应的ASCII对应的字符 mov al, 48h call putchar ;输出末尾的H mov ax, 4c00h int 21h ;退出OS ;定义一个四位二进制数转换为一位十六进制数的子程序 ;入口参数:一个四位二进制数 ;出口参数:该四位二进制数对应的十六进制数的ASCII conver

16、t proc and al, 0fh ;取低四位 add al, 30h cmp al, 39h jbe main1 add al, 07h main1: ret convert endp ;定义一个显示AL中的ASCII所对应字符的子程序 ;入口参数:al ;出口参数:显示字符 putchar proc mov ah, 02h mov dl, al int 21h ;显示字符 ret putchar endp main endpcode ends end main运行结果:第七题:源程序:;数据段从100H开始存放字符串str1;从200H开始存放str2;二者均以NULL字符为结束符;编写

17、程序将str2拷贝到str1末尾,形成一个完整字符串data segment para org 100hstr1 db 0dh,0ah,'Hello ',0org 200hstr2 db 0dh,0ah,'Automation!',0data endsss_seg segment stack db 100 dup (0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc far mov ax, data ;数据段赋值mov ds, axpush dspop es ;es,d

18、s->datamov al, 0mov cx, 0ffffhlea di, str1repnz scasbdec di ;使es:di->str1中的结束符lea si, str2inc siinc si ;使ds:si->str2中的有效字符开头cld ;df<-0main2:cmp al, str2si ;判定是否到str2的结束jz main3movsbjmp main2 ;串传送main3:mov str1di, 0 ;str1末尾加0lea si, str1 call getchar ;开始取字符mov al, 0 call putchar ;显示最后的0 m

19、ov ax, 4c00hint 21h ;退出OS;定义一个取字符的子程序;入口参数:ds:si中的字符;出口参数:字符的ASCII->algetchar proc cld main5:lodsbcmp al, 0jz main4call putcharjmp main5main4:retgetchar endp;定义一个显示字符的子程序;入口参数:al中的ASCII;出口参数:显示字符putchar proc mov dl, almov ah, 02hint 21hretputchar endpmain endp code ends end main运行结果:第八题:源程序:;以10进

20、制形式显示内存中一有符号字节数据data segment para var db 0e6hbuf db 3 dup (0)str1 db 0dh,0ah,'The converted result is:$'data endsss_seg segment stack db 100 dup (0)ss_seg endscode segment para assume cs:code,ss:ss_seg,ds:datamain proc far mov ax, data ;数据段赋值mov ds, axlea dx, str1mov ah, 9 ;显示输出结果提示int 21hmo

21、v cx, 3 ;设定除法的循环次数mov bx, 3mov al, varand ax, 0ffh ;ah清零push ax ;保存AX中的var数据cmp al, 0 ;判断数据的正负jge main1mov dl, '-'mov ah, 2int 21hpop axneg al ;求负数的相反数main1: ;循环除法求余数,既是个位,十位,百位mov dl, 10div dldec bxmov bufbx, ahand ax, 0ffh ;ah清零loop main1mov cx, 3 ;设定显示字符的循环次数mov bx, 0circle: ;循环显示转换后的结果 add bufbx, 30hmov dl, bufbx mov ah, 2int 21hinc bxloop circleexit:mov ax, 4c00hint 21h ;退出OSmain endpcode ends end main运行结果:第九题:源程序:;将一个16位的无符号数var, 转换为非压缩格式BCD码,存放在内存中buf开始的单元中;(按高位在前、低位在后的顺序存放)data segment para var dw 65535 buf db 5 dup (0)data endsss_

温馨提示

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

评论

0/150

提交评论