汇编语言大作业
汇编语言部分作业题(含答案)

一、填空题1、编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。
字符区首地址及其长度为变元。
宏定义如下:CLRB MACRO N, CFILMOV CX, ()CLDMOV ( ), ' ' ;;取空格符的ASCII码() DI, CFILREP ( )( )正确答案:第一空:n第二空:al第三空:LEA第四空:STOSB第五空:endm我的答案:得分: 6.6分第一空:N第二空:AL第三空:LEA第四空:STOSB第五空:ENDM2、某工厂计算周工资的方法是每小时的工资率RATE乘以工作时间HOUR,另外每工作满10小时加奖金3元,工资总数存放在WAG中。
请将周工资的计算编写成一条宏指令WAGES.宏定义如下:WAGES MACRO RATE, HOUR, WAGMOV (), HOUR ;;计算周工资(WAG),公式为:HOUR* RATEMOV BL, RATEMUL BLMOV WAG, AXMOV AL, HOUR ;;计算奖金存入(AX),公式为:HOUR/10的商*3MOV AH, 0MOV BL, 10DIV ()MOV BL, ()MUL ()ADD WAG, ();;计算周工资总数ENDM正确答案:第一空:al第二空:bl第三空:3第四空:BL第五空:AX我的答案:得分: 6.6分第一空:AL第二空:BL第三空:3第四空:BL第五空:AX3、下面的程序段是二进制到十六进制转换程序,请填空。
mov ch, 4 rotate: mov cl, 4rol bx,()mov al, bland al,()add al, 30h ; ’0’~’9’ ASCII 30H~39Hcmp al, 3ahjl printitadd al,() ; ’A’~’F’ ASCII 41H~46Hprintit: mov() , almov ah, 2int 21h()jnz rotate正确答案:第一空:cl第二空:0f;0fh第三空:7h;07h;07第四空:dl第五空:dec ch我的答案:得分: 6.6分第一空:cl第二空:0fh第三空:07h第四空:dl第五空:dec ch4、IRP BUF,<3,17,20,46,87,89,100> DB BUFENDM汇编后生成的代码等价于( )正确答案:第一空:DB 3,17,20,46,87,89,100我的答案:得分: 6.6分第一空:DB 3,17,20,46,87,89,1005、IRPC BUF,12345DB BUFendm汇编后的代码等价于:()正确答案:第一空:DB 1,2,3,4,5我的答案:得分: 6.6分第一空:DB 1,2,3,4,56、已知宏定义:FOO macro p1,p2,p3mov ax,p1p2,p3endm宏调用:FOO WORD_VAR,inc,ax则宏展开指令是( )( )正确答案:第一空:ov ax,WORD_VAR第二空:inc ax我的答案:得分: 7.6分第一空:mov ax,WORD_VAR第二空:inc ax7、已知宏定义:LEAP macro COND,LABJ&COND LABendm宏调用:LEAP Z,THERE则宏展开指令是()正确答案:第一空:JZ THERE我的答案:得分: 7.6分第一空:JZ THERE8、已知宏定义FO macro P1JMP TA&P1endm宏调用:FO WORD_VAR则宏展开结果是( )正确答案:第一空:JMP TAWORD_VAR我的答案:得分: 7.6分第一空:JMP TAWORD_VAR9、已知宏定义:MSGGEN macro LAB,NUM,XYZLAB&NUM db 'hello mr.&XYZ' endm宏调用:MSGGEN MSG,1,taylor则宏展开结果是( )正确答案:第一空:MSG1 db 'hello mr.taylor'我的答案:得分: 7.6分第一空:MSG1 db 'hello mr.taylor'10、MSG macro COUNT,STRINGMSG&COUNT db STRINGendmERRMSG macro TEXTCNTR=CNTR+1MSG %CNTR,TEXTendm宏调用:CNTR=0ERRMSG 'syntax error'则宏展开是( )正确答案:第一空:MSG1 db 'syntax error'我的答案:得分: 7.6分第一空:MSG1 db 'syntax error'11、下面的循环程序是利用逻辑尺来控制的,请填空。
汇编语言大作业课程设计

汇编语言大作业课程设计一、课程目标知识目标:1. 学生能理解汇编语言的基本概念,掌握汇编指令的使用和程序结构;2. 学生能描述计算机硬件与汇编语言之间的关系,了解汇编语言在计算机科学中的地位;3. 学生掌握汇编语言编程技巧,能阅读和分析简单的汇编程序;4. 学生了解汇编语言在逆向工程和系统底层开发中的应用。
技能目标:1. 学生能运用汇编语言编写简单的程序,实现基本的输入输出、运算和控制流程;2. 学生能通过调试工具对汇编程序进行调试,找出并修正程序中的错误;3. 学生能运用汇编语言解决实际问题,如编写一个简单的系统调用程序。
情感态度价值观目标:1. 学生培养对计算机底层原理的兴趣,激发探究精神,提高自主学习和解决问题的能力;2. 学生认识到汇编语言在计算机科学中的重要作用,增强对计算机科学的热爱;3. 学生通过汇编语言学习,培养团队合作意识,提高沟通表达能力和协作能力。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握汇编语言基本知识的基础上,提高实际编程能力,培养解决实际问题的能力。
同时,注重培养学生对计算机科学的兴趣和热爱,提高学生的综合素质。
课程目标具体、可衡量,为后续教学设计和评估提供明确依据。
二、教学内容1. 汇编语言基础知识:介绍汇编语言的基本概念、组成元素、指令系统及其功能;- 教材章节:第1章 汇编语言概述- 内容列举:汇编指令、寄存器、内存寻址、数据类型、程序结构等。
2. 汇编指令与程序设计:学习汇编指令的使用,掌握汇编程序设计的基本技巧;- 教材章节:第2章 汇编指令与程序设计- 内容列举:算术运算指令、逻辑运算指令、控制流指令、子程序调用等。
3. 汇编语言与计算机硬件:了解汇编语言与计算机硬件的关系,分析硬件对汇编程序的影响;- 教材章节:第3章 计算机硬件与汇编语言- 内容列举:CPU结构、寄存器组织、内存管理、中断处理等。
4. 汇编语言编程实践:通过实例分析,使学生掌握汇编语言编程方法和技巧;- 教材章节:第4章 汇编语言编程实践- 内容列举:输入输出编程、字符串处理、数值运算、系统调用等。
汇编语言作业及参考答案

汇编语言作业答案1.3什么是汇编语言源程序、汇编程序、目标程序?见教材P41.10数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0Dh、0aH对应的是什么字符?见教材P81.11计算机中有一个“‘编码,如果把它认为是无符号数,它是十进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?97,61h,a1.13什么是DOS和POM-BIOS?DOS:磁盘操作系统;POM-BIOS:可编程的基本输入输出系统2.3 举例说明CF和OF标志的差异。
见教材P20-212.5 什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达:(1)FFFFh:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h见教材P22-23 FFFF0h 417h 24500h BC777h2.6 8086有哪4种逻辑段,各种逻辑段分别是什么用途?见教材P232.10 说明下列指令中源操作数的寻址方式?如果BX=2000H,DI=40H,给出DX的值或有效地址EA的值。
(1)mov dx,[1234h] 直接寻址(2) mov dx,1234h 立即寻址(3) mov dx,bx 寄存器寻址(4) mov dx,[bx] 寄存器间接寻址(5) mov dx,[bx+123h] 寄存器相对寻址(6) mov dx,[dx+di] 基址变址寻址(7) mov dx,[bx+di+1234h] 相对基址变址寻址2.11 已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行后AX寄存器的内容。
(1)mov ax,1200h 1200h(2) mov ax,bx 0100h(3) mov ax,[1200h] 2a4ch(4) mov ax,[bx] 1234h(5) mov ax,[bx+1100h] 2a4ch(6) mov ax,[bx+si] 5678h(7) mov ax,[bx][si+1100h] b765h2.15 已知SS=FFAOH、SP=00B0H,画图说明执行下列指令序列时,堆栈区和SP的内容如何变化?mov ax,8057hpush ax SP=00B2 [00B1]=80hmov ax,0f79hpush ax SP=00B2 [00B2]=0f79hpop bx BX=0f79h SP=00B1pop [bx] SP=00B0h2.16给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al ,89h 不影响标志add al, al 见教材P38add al, 9dh 见教材P38cmp al, 0bch 见教材P40sub al, al 见教材P39dec al 见教材P39inc al 见教材P382.17设均为双字数据,分别存放在地址为的存储单元中,他们的运算结果存入单元。
课程设计汇编语言大作业

汇编语言大作业C语言的秘密2014年11月19日目录引言 (5)1. 比较C语言与ASM要素 (5)2. 深入阐述c语言实现 (5)第一章简要描述对应关系 (5)1. 常量 (5)2. 不同类型变量 (5)| 一般数据类型 (5)| 指针 (5)| 字符串 (6)| 多维数组 (6)| 结构体 (6)| 类 (6)3.计算常、变量表达式 (7)| 简单计算 (7)| 位运算 (7)4.宏 (7)5.函数,子程序 (8)6.其他结构的汇编对应 (8)第二章深入阐述C语言的实现 (8)1. 内存的使用 (8)| 程序头 (8)| 代码段 (8)| 部分无法用立即数表示的常量 (8)| 声明注释 (9)| 全局变量,静态变量 (9)| 需求文件,函数,链接库等 (9)| 栈 (10)2.类型 (10)全局变量和局部变量的不同分配 (10)普通变量 (11)字符串 (11)多维数组 (11)指针 (11)结构体 (11)类 (12)3.指针 (14)存储方式 (14)指针取值(*p) (14)指针传递 (14)4.函数 (14)确保堆栈平衡(上层函数) (14)传参数(上层函数) (15)中间层 (15)函数保护主ebp (15)堆栈让出子程序变量空间 (16)执行函数体 (16)准备返回值 (16)5.堆栈框架 (18)6.全局、局部变量 (19)全局变量 (19)局部变量 (19)7.算数运算及表达式计算 (19)常量表达式 (20)简单变量表达式计算 (20)需要存储中间变量的表达式计算 (20)8.C语言编译、连接、装入内存 (21)编译 (21)链接 (21)装入内存 (21)9.C语言IO功能实现 (21)第三章c语言与汇编语言优缺点及适应场合 (21)1.C语言优点,汇编语言的不足 (21)2.汇编语言优点,c语言的不足 (21)3.c语言使用场合 (22)4.汇编语言使用场合 (22)第四章课程收获及想法 (22)1.收获及想法 (22)2.一些建议 (23)引言1.比较C语言与ASM要素具体比较内容为:各种类型-含字符串及多维数组、指针、结构联合-可嵌套、类-可继承等,常量变量及表达式,算术及逻辑运算,宏与子程序-函数,全局变量、局部变量-含静态变量,参数及传递-传值或地址、返回值等。
大工《汇编语言程序》大作业资料

大连理工大学远程与继续教育学院《汇编语言程序设计》课程设计题目:进制转换程序1.谈谈你对本课程学习过程中的心得体会与建议?汇编语言程序设计是我们计算机专科的一门专业课。
本课程是面向机器的一门编程语言课。
在对汇编语言的学习过程中,可以对计算机组成原理有更深入的了解,同时掌握汇编语言对于某些硬件编程比如单片机开发和嵌入式系统的开发应用也是必不可少的。
汇编语言相比于其他高级语言明显的优点就是运行速度快,而缺点就是需要兼顾机器本身的硬件结构特点进行编程,因此学习本课程要多实践多思考。
通过本课程的学习可以对汇编语言有一个整体的把握和认识。
当我刚开始选择这个题目是因为课本上有一个相近的代码转换,所以感觉这个题目应该很好写。
可是等到真正动手的时候就感到了困难。
首先是对字符串的输入输出的处理,解决不了就改成了字母大小写转换是每次只输入一个字母,然后根据其大小写转换,如大写就转换成小写,否则反之。
然而在随后的进制转换中用遇到了同样的问题,发现这是一个不能不解决的问题,随后查阅了资料才解决。
随后实在数值转换过程中对模块的设计上又出现了问题。
最初的构想是设计六个模块分别对应相应的数值转换功能。
可是在三个写好以后发现了下面要写的代码有很多重复的地方,于是就把这些重复的代码定义成了子函数来使用然后发现将程序按照输入、输出的不同来分模块,以BX作为连接,比原来的程序更为简洁,逻辑上也更加清楚,有种豁然开朗的感觉。
在改进程序的过程中感到非常有成就感。
在编写代码的过程中让我充分感受到了不同编程语言之间的差别。
对与高级语言来说或许是很简单的一个程序或者只需要调用已有的函数库,可是对于汇编来说却要写上几十行甚至更多的代码。
可是更加深刻的了解了寄存器、存储器之间的数据流向,因为每个考虑不周都会导致一大堆的错误出现,常常令人感到一种无力感,想要放弃。
当程序一步步接近完成,看着子函数一个个都运行成功,再组合到一起,那种喜悦是无与伦比,之前所受到的苦楚又是那么的微不足道。
总汇编语言程序设计期末大作业。

汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3)输出总分高于班平均总分的全部学生记录。
要求:元月4日前提交一份纸质报告(班长统一收齐)。
大作业格式:1.标题:汇编语言程序设计期末大作业2.作业题目:(上述)3.算法分析(流程图)4.实现代码(必须含注释)5.实验结果(汇编、连接、运行的截图)6.总结代码实现student struct ;定义结构Snumber db 11,0,11 dup(?)Sname db 11,0,11 dup(?)English db 4,0, 4 dup(?)Chinese db 4,0, 4 dup(?)Math db 4,0, 4 dup(?)Sum db 4,0, 4 dup(?)student ends;数据段data segmentmessMenu db '----------------The Homework of Assembler-----------------$'messMenu1 db '----------Name:TU LIN No:8000110028--------------$'messNext db'--------------------------------------------------------------------------------$'messName db 'Please input the student name(<11):$'messNum db 'Please input the student number(<11):$'messEnglish db 'Please input the English score:$'messChinese db 'Please input the Chinese score:$'messMath db 'Please input the Math score:$'mess1 db 'name:$'mess2 db 'number:$'mess3 db 'English:$'mess4 db 'Chinese:$'mess5 db 'Math:$'messSumScore db 'SumScore:$'MessTab db 09,'$' ;Tab 用于排列对齐StudAddress dw 10 dup(?) ;存各学生的偏移地址EnglishScore db 10 dup(?) ;存学生英语成绩的十进制数ChineseScore db 10 dup(?) ;存学生语文成绩的十进制数MathScore db 10 dup(?) ;存学生数学成绩的十进制数Average dw ?Buf db 6 dup(?)SumScore dw 10 dup(?) ;用于记录每个学生总分NumbersOfStudent db 0Stu student 10 dup(<>)SumRank db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9FName db 'C:\StuScore.dat', 0;文件FileHandle dw ?;文件句柄EndOfFile dw 0ffhOtherLine db 0ah, 0dh, '$'FileSpace db " "data ends;堆栈段stack segmentdb 100h dup(?)stack ends;代码段code segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,ax ;将数据段首地址传给dsmov ax,stackmov ss,ax ;将堆栈段首地址传给ssmov sp,0call Endlinelea dx,messMenumov ah,09hint 21hcall Endlinelea dx,messMenu1mov ah,09hint 21hcall Endlinelea si,Stu ;取student的首地址给simov cx,10InputStu:call GetStudentlea dx,messNextmov ah,09hint 21hadd si,50loop InputStu ;输出循环结束lea si,Stucall GetEnglishScorecall GetChineseScorecall GetMathScorecall Stop ;程序运行停止一下,按回车键继续执行 call Writetofilecall stopcall SumAveragecall GetSumcall GetAddresscall SortStudentcall Stop ;程序运行暂停一下,按回车键,继续执行call ShowStumov ah,4chint 21h;============================================================;子程序名:GetStudent;功能:录入学生信息;============================================================ GetStudent proc nearpush sipush dxpush axpush cx ;子程序保护现场lea dx,messNamemov ah,9int 21hlea dx,[si].Snamemov ah,0Ahint 21hcall Endlinelea dx,messNummov ah,9int 21hlea dx,[si].Snumbermov ah,0Ahint 21hcall Endlinelea dx,messEnglishmov ah,9int 21hlea dx,[si].Englishmov ah,0Ahint 21hcall Endlinelea dx,messChinesemov ah,9int 21hlea dx,[si].Chinesemov ah,0Ahint 21hcall Endlinelea dx,messMathmov ah,9int 21hlea dx,[si].Mathmov ah,0Ahint 21hcall Endlinepop cxpop axpop dxpop siretGetStudent endp;============================================================ ;子程序名:TureShow;功能辅助子程序ShowStu,用于输出字符串;============================================================ TureShow proc nearpush dx ;保护相关寄存器push cxpush bxpush axmov bx,dx ;将bx指向缓存区的地址xor cx,cxmov cl,[bx+1] ;cl存放了缓存区录入的字符数LoopTS:mov dl,[bx+2] ;从第三个偏移地址开始显示mov ah,2 ;调用单个字符输出中断int 21hinc bxloop LoopTSpop axpop bxpop cxpop dxretTureShow endp;============================================================ ;子程序名:ShowStu;功能:显示学生信息记录;============================================================ ShowStu proc nearpush cxpush axpush dxpush sipush di ;保护现场call Endlinelea di,SumScorelea bx,StudAddressmov cx,10Loop1: mov si,word ptr[bx]lea dx,mess1mov ah,09hint 21hlea dx,[si].Snamecall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess2mov ah,09hint 21hlea dx,[si].Snumbercall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess3mov ah,09hint 21hlea dx,[si].Englishcall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess4mov ah,09hint 21hlea dx,[si].Chinesecall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess5mov ah,09hint 21hlea dx,[si].Mathcall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,messSumScoremov ah,09hint 21hmov ax,[di]call Outputcall Endlineadd bx,2add di,2loop Loop1lea dx,messNextmov ah,09hint 21hpop dipop sipop dxpop axpop cxretShowStu endp;============================================================= ;子程序名:Endline;功能:回车换行;============================================================= Endline proc nearpush ax ;保护相关寄存器push dxpush cxmov ah,2 ;回车mov dl,0ahint 21hmov ah,2 ;换行mov dl,0dhint 21hpop cxpop dxpop axretEndline endp;=============================================================;子程序名GetEnglishScores:;功能:将得到的指定个学生的分数以十进制保存到EnglishScore缓冲区中;============================================================= GetEnglishScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使si指向第一个学生的偏移地lea bp,EnglishScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores0:push cx ;保护外循环的CX值lea bx,[si].English ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore0:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到di,且将高位di的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来di中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore0mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区EnglishScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores0pop bppop axpop bxpop cxpop dxpop sipop diretGetEnglishScore endp;=============================================================;子程序名GetChineseScore:;功能:将得到的指定个学生的分数以十进制保存到ChineseScore缓冲区中;============================================================= GetChineseScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使di指向第一个学生的偏移地lea bp,ChineseScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores1:push cx ;保护外循环的CX值lea bx,[si].Chinese ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore1:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到si,且将高位si的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来si中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore1mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区ChineseScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores1pop bppop axpop bxpop cxpop dxpop sipop diretGetChineseScore endp;=============================================================;子程序名GetMathScore:;功能:将得到的指定个学生的数学分数以十进制保存到MathScore缓冲区中;============================================================= GetMathScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使di指向第一个学生的偏移地lea bp,MathScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores2:push cx ;保护外循环的CX值lea bx,[si].Math ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore2:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到si,且将高位si的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来si中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore2mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区MathScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores2pop bppop axpop bxpop cxpop dxpop sipop diretGetMathScore endp;==============================================================;子程序名:Writetofile;功能:用于创建文件并且存储学生信息;============================================================== Buildfile :push axpush cxpush dxmov ah, 3chmov cx, 00lea dx, FNameint 21hjc CreateFileErrormov FileHandle, axjmp CreateFileOkCreateFileError:mov ah, 09hmov dx, offset CreateFileErrorint 21hCreateFileOk:pop dxpop cxpop axretWriteToFile:push axpush bxpush cxpush dxpush dipush silea di, [si].SNamemov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx,FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].SNumbermov dx, dimov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].ChineseScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].MathScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].EnglishScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].SumScore mov dx, dimov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteEndLinejmp WriteFileOkWriteFileError:lea dx,WriteFileErrormov ah, 09hint 21hWriteFileOk:pop sipop dipop dxpop cxpop bxpop axret;******************************************************************** WriteSpace:mov cx, 2lea dx, FileSpacemov bx, FileHandlemov ah, 40hint 21hret;******************************************************************** WriteEndLine:mov cx, 2lea dx, OtherLinemov bx, FileHandlemov ah, 40hint 21hretCloseFile:mov ah, 40hmov bx, FileHandlemov cx, 2lea dx, EndOfFileint 21hmov ah, 3ehmov bx, FileHandleint 21hret;============================================================== ;子程序名:GetSum;功能:用于计算出每个学生的各科成绩的总分;============================================================== GetSum proc nearpush axpush dipush sipush bxpush cxlea di,EnglishScorelea si,SumScoremov cx,10mov al,0LoopSum:mov ah,0mov al,[di]mov word ptr[si],axinc diadd si,2loop LoopSumlea di,ChineseScorelea si,SumScoremov cx,10mov al,0LoopSum1:mov ah,0mov al,[di]add word ptr[si],axinc diadd si,2loop LoopSum1lea di,MathScorelea si,SumScoremov cx,10mov al,0LoopSum2:mov ah,0mov al,[di]add word ptr[si],axinc diadd si,2loop LoopSum2pop cxpop bxpop sipop dipop axretGetSum endp;============================================================== ;子程序名:SumAverage;功能:用于计算出平均成绩,并输出总分高于平均分的学生记录;============================================================== SumAverage proc nearpush axpush bxpush cxpush dxpush simov cl, NumbersOfStudentmov ch, 0mov bx, cxmov ax, 0mov dx, 0mov si, offset SumScoreAverageLoop:add ax, word ptr [si]adc dx, 0add si, 2loop AverageLoopdiv bxmov Average, ax;输出高于平均成绩的同学mov dx, offset ShowBigThanAveragemov ah, 09hint 21hmov cl, SNumbermov ch, 0mov di, 0mov si, 0ShowBigThanAverage:mov ax, SumScore[si]cmp ax, Averagejl ShowBigOkmov dl, SumRank[di]mov al, type studentmul dlmov bx, axcall Outputadd si, 2inc diloop ShowBigThanAverageShowBigOk:mov dx, offset OtherLinemov ah, 09hint 21hpop sipop dxpop cxpop bxpop axretSumAverage endp;============================================================= ;子程序名:Output;功能:将ax中的二进制以十进制形式输出;============================================================== Output proc nearpush dipush bxpush axpush dxlea di,Bufadd di,6mov byte ptr[di],'$'mov bx,10CHANGE:dec dimov dx,0div bxadd dl,30hmov byte ptr[di],dlcmp ax,0jnz CHANGEmov dx,dimov ah,09hint 21hpop dxpop axpop bxpop diretOutput endp;============================================================= ;子程序名:GetAddress;功能:将指定个学生的偏移地址顺序保存到StudAddress;============================================================= GetAddress proc nearpush si ;保护相关寄存器push bxpush cxlea si,Stu ;使di指向第一个学生的偏移地址lea bx,StudAddress ;使bx指向存学生偏移地址的缓冲区mov cx,10 ;共有指定个学生LoopAdd:mov word ptr[bx],word ptr siadd bx,2 ;使bx指向存学生偏移地址的缓冲区的下一个地址add si,50 ;使di指向下一个学的生偏移地址loop LoopAddpop cxpop bxpop diretGetAddress endp;============================================================= ;子程序名:SortStudent;功能:根据学生分数进行排序;用冒泡法根据学生分数对分数从大到小排序;同时将对应的偏移地址进行排序;============================================================= SortStudent proc nearpush dxpush cxpush bxpush axpush dipush simov cx,10dec cxLoopChange0:push cx ;保护外循环的CX值lea bx,SumScore ; bx指向学生分数偏移地址lea si,StudAddress ;si指向存学生偏移地址的地址LoopChange1: ;将学生分数和下一个学生分数分别送入al,dl并比较大小;若当前学生分数小于下一个分数要交换其分数mov dx,word ptr[bx+2] ;此分数对应的学生的偏移地址mov ax,word ptr[bx]cmp ax,dxja EndExchange ;若大于则转而比较下两个分数值;交换偏移地址mov ax,word ptr [si+2] ;指定向ax中传入2个字节数据mov dx,word ptr [si]mov [si],axmov [si+2],dx;交换分数值mov ax,word ptr[bx+2]mov dx,word ptr[bx]mov word ptr[bx],axmov word ptr[bx+2],dxEndExchange:add si,2 ;指向下一个学生偏移地址的地址add bx,2 ;指向下一个存学生分数的地址loop LoopChange1pop cx ;保护外循环的CX值loop LoopChange0pop sipop dipop axpop bxpop cxpop dxretSortStudent endp;=============================================================;子程序名:MessTb;功能:输出1个Tab键;============================================================= MessTb proc nearpush dx ;保护相关寄存器push axlea dx,MessTab ;指向输出1个Tab键缓冲区mov ah,9 ;调用字符串输出程序int 21hpop axpop dxretMessTb endp;=================================================================== ;子程序名:Stop;功能是让程序停止运行一下,输入回车键继续执行;=================================================================== Stop proc nearpush ax ;保护相关寄存器push dxpush cxmov ah,1 ;回车int 21hpop cxpop dxpop axretStop endpcode endsend start。
(完整)汇编语言程序设计实验指导大作业,推荐文档

实验一、调试工具DEBUG的应用一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。
5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。
6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。
在DEBUG环境下所有数据和地址都是按16进制处理,所以不要加后面的H标志。
7、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
二、8086常用指令练习1、传送指令1)用A命令在内存400H处键入下列内容:-A 0400****:0400 MOV AX,1234****:0403 MOV BX,5678****:0406 XCHG AX,BX****:0408 MOV AH,10****:040A MOV AL,20****:040C MOV CX,89AB****:040F XCHG AX,CX****:0411注:****为段寄存器CS的当前值,内容是不一定的,每行命令以回车键结束。
汇编语言程序设计期末大作业

汇编语言程序设计期末大作业作为汇编语言程序设计的期末大作业,我选择了一个简单的任务,即编写一个能够对一组学生成绩进行排序的程序。
为了完成这个任务,我首先定义了一个存储学生数据的数组,每个学生的数据包括学生姓名和学生成绩。
然后,我使用冒泡排序算法对学生成绩进行排序。
冒泡排序算法的基本思想是从数组的第一个元素开始,依次比较相邻的两个元素,如果它们的顺序错误,则交换它们的位置。
这样一轮比较下来,最大的元素就会被移到数组的最后一个位置。
然后,我们对剩下的元素再次进行相同的比较和交换,直到整个数组都被排序。
在我的程序中,我使用了8086汇编语言编写了一个排序子程序。
这个子程序接受一个指向学生数据数组的指针和数组的长度作为输入,并使用冒泡排序算法对数组进行排序。
在排序过程中,我使用了一个内循环和一个外循环来实现比较和交换的操作。
内循环用于比较和交换数组中相邻的两个元素,而外循环用于控制内循环的次数,以保证整个数组都被排序。
在主程序中,我首先定义了一个存储学生数据的数组,并初始化了数组中的元素。
然后,我调用排序子程序,并传递数组的指针和长度作为参数。
排序子程序完成后,我打印排序后的学生数据,以展示程序的结果。
通过编写这个程序,我不仅复习了汇编语言的基本知识和技巧,还学会了使用冒泡排序算法对数据进行排序。
我发现在汇编语言中实现算法可能会比高级语言更复杂和繁琐,但它也提供了更大的灵活性和控制力。
此外,我通过这个项目还加深了对指针和数组的理解和应用,并提高了编写结构化程序的能力。
总的来说,这个汇编语言程序设计的期末大作业让我在实践中巩固了所学的知识,培养了解决问题和编写程序的能力。
通过不断地尝试和调试,我成功地实现了一个能够对一组学生成绩进行排序的程序。
这个过程对我个人的成长和学习是非常有意义的。
大工《汇编语言程序设计》大作业参考题目及要求【内容仅供参考】543

题目一:十进制转换十六进制程序设计1.谈谈你对本课程学习过程中的心得体会与建议?本学期开始,我便意识到汇编语言绝不是轻易能弄懂的。
相较于曾经学过的C语言,电脑等于在迁就人的思维方式,但汇编却是接近机器语言的一门语言,我们学习和编写程序时必须要去迁就电脑的思维方式,有时候还要设身处地地用电脑的角度去思考问题,这就是我学习汇编语言时感受最深的地方,想起来很简单,写起来相当的不易。
在学习之前我们都需要明确何为汇编语言。
计算机能够直接识别的数据是由二进制数0和1组成的代码。
机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。
为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。
在经过一个学期系统性的学习后,自己也算初窥门径,有所收获。
首先,对一样新课程要学会与学过的课程作比较,这样有助于我们更快进入状态,最重要的是一些思考问题,实现功能的逻辑的思考,会帮助我们很快的找到编写程序的思路和方向。
汇编语言与其它的程序设计语言相比,操作的是更加底层的东西,它可以直接与硬件打交道,而别的语言基本不可能实现这样的功能。
既然是与硬件打交道,那么我们在写程序的时候就要更加小心了,可能一不小心就会把程序跑丢了。
其次,学习汇编语言,首要问题是学习80X86指令系统。
如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。
指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。
如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。
其中方括号中的内容为可选项。
指令助记符决定了指令的功能,对应一条二进制编码的机器指令。
指令的操作数个数由该指令确定,可以没有操作数,也可以有一个或多个操作数,大多数指令要显示写出来,还有些操作数是隐含的。
再者,在编写汇编程序时,应该注意特别容易出现的错误,例如在编写数据传送指令时,目的操作数和源操作数的类型一定要匹配,CS不能作为目的操作数,offset后只能跟简单地址符号,等等。
汇编语言作业及参考答案

汇编语言作业及参考答案汇编语言作业答案1.3什么是汇编语言源程序、汇编程序、目标程序?见教材P41.10数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0Dh、0aH对应的是什么字符?见教材P81.11计算机中有一个“01100001‘编码,如果把它认为是无符号数,它是十进制什么数?如果认为它是BCD 码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?97,61h,a1.13什么是DOS和POM-BIOS?DOS:磁盘操作系统;POM-BIOS:可编程的基本输入输出系统2.3 举例说明CF和OF标志的差异。
见教材P20-212.5 什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达:(1)FFFFh:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h见教材P22-23 FFFF0h 417h 24500h BC777h2.6 8086有哪4种逻辑段,各种逻辑段分别是什么用途?见教材P232.10 说明下列指令中源操作数的寻址方式?如果BX=2000H,DI=40H,给出DX的值或有效地址EA的值。
(1)mov dx,[1234h] 直接寻址(2) mov dx,1234h 立即寻址(3) mov dx,bx 寄存器寻址(4) mov dx,[bx] 寄存器间接寻址(5) mov dx,[bx+123h] 寄存器相对寻址(6) mov dx,[dx+di] 基址变址寻址(7) mov dx,[bx+di+1234h] 相对基址变址寻址2.11 已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行后AX寄存器的内容。
《汇编语言》作业及答案

习题一1.在计算机内部,计算机能够直接执行的程序语言是。
A.汇编语言B.C++语言C.机器语言D.高级语言2.在堆栈段中,存放栈顶地址的寄存器是。
A.IPB.SPC.BXD.BP3.指令指针寄存器IP用来存放代码段中的偏移地址。
在程序运行的过程中,它始终指向。
A.下一条指令的首地址B.下一条指令的地址C.当前指令的首地址D.当前指令的地址4.编译程序的功能是。
A.检查源程序中的语法错误和逻辑错误B.将源程序编译成目标程序C.改正源程序中的语法错误D.将高级语言源程序翻译成汇编语言源程序5.用户为了解决自己的问题,用汇编语言所编写的程序,称为。
A.目标程序B.源程序C.可执行程序D.汇编程序6.计算机中用来存储程序、数据等信息的记忆装置是。
A.控制器B.运算器C.CPUD.存储器7.在宏汇编中,源程序必须通过____编译_______生成目标代码,然后用连接程序将其转化为可执行文件,该文件可在系统中运行。
习题二1当SS=3000H,SP=0100H时,执行PUSH AX指令后,堆栈顶部的物理地址是()A.30100HB.30098HC.30102HD.300FEH2设10000010B分别以原码、补码及反码表示时,则对应的十进制数依次是()A.-82、-126、-2B.-2、-125、126C.-2、-126、-125D.-82、-125、1253标志寄存器中属于控制标志位的是()A.DF,OF,SFB.DF,IF,TFC.OF,CF,PFD.AF,OF,SF4设(AX)=4544H,在执行指令”SUB AH,AL”之后,()A.CF=0,OF=0B.CF=0,OF=1C.CF=1,OF=0D.CF=1,OF=15若寄存器AX、BX、CX、DX的内容分别为18,19,20,21时,依次执行PUSH AX,PUSH BX,POP CX,POP DX后,寄存器CX的内容为______19____________。
汇编大作业

《汇编语言》期末大作业一、①通过键盘输入月份(月份在1---12之间,要求验证所输入月份的合法性,按‘E’或‘e’键表示程序结束);②在屏幕上显示对应该月份的英文单词;③返回①。
data segmentstate1 db 'Please input your search month',0dh,0ah,'$'state2 db 'error!!!',0dh,0ah,'input your correct number month',0dh,0ah,'$'a1 db 'January',0dh,0ah,'$'a2 db 'February',0dh,0ah,'$'a3 db 'March',0dh,0ah,'$'a4 db 'April',0dh,0ah,'$'a5 db 'May',0dh,0ah,'$'a6 db 'June',0dh,0ah,'$'a7 db 'July',0dh,0ah,'$'a8 db 'Augest',0dh,0ah,'$'a9 db 'September',0dh,0ah,'$'a10 db 'October',0dh,0ah,'$'a11 db 'Novermber',0dh,0ah,'$'a12 db 'December',0dh,0ah,'$'data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axspart:mov ah,9hmov dx,seg state1mov ds,dxmov dx,offset state1int 21hmov ah,1h int 21hcmp al,'1'je parts1cmp al,'2'je parts2cmp al,'3'je parts3cmp al,'4'je parts4cmp al,'5'je parts5cmp al,'6'je parts6cmp al,'7'je parts7cmp al,'8'je parts8cmp al,'9'je parts9cmp al,'e'je partsendcmp al,'E'je partsendjmp errorparts1:jmp part1 parts2:jmp part2 parts3:jmp part3 parts4:jmp part4 parts5:jmp part5 parts6:jmp part6 parts7:jmp part7parts8:jmp part8 parts9:jmp part9 partsend:jmp partenderror:mov ah,9hmov dx,seg state2 mov ds,dxmov dx,offset state2 int 21hjmp spartpartend:mov ah,4chint 21hpart1:mov ah,1hint 21hcmp al,'0'je part10cmp al,'1'je part11cmp al,'2'je part12cmp al,0dhje part13jmp errorpart13:mov ah,9hmov dx,seg a1mov ds,dxmov dx,offset a1int 21hjmp spartpart10:mov ah,1hint 21hcmp al,0dhje part101jmp error part101:mov ah,9hmov dx,seg a10 mov ds,dxmov dx,offset a10 int 21hjmp spartpart11:mov ah,1hint 21hcmp al,0dhje part111jmp errorpart111:mov ah,9hmov dx,seg a11 mov ds,dxmov dx,offset a11 int 21hjmp spartpart12:mov ah,1hint 21hcmp al,0dhje part121jmp errorpart121:mov ah,9hmov dx,seg a12 mov ds,dxmov dx,offset a12 int 21hjmp spartpart2:mov ah,1hint 21hcmp al,0dhje part21jmp errorpart21:mov ah,9hmov dx,seg a2 mov ds,dxmov dx,offset a2 int 21hjmp spartpart3:mov ah,1hint 21hcmp al,0dhje part31jmp errorpart31:mov ah,9hmov dx,seg a3 mov ds,dxmov dx,offset a3 int 21hjmp spartpart4:mov ah,1hint 21hcmp al,0dhje part41jmp errorpart41:mov ah,9hmov dx,seg a4 mov ds,dxmov dx,offset a4 int 21hjmp spartpart5:mov ah,1hint 21hcmp al,0dhje part51 jmp errorpart51:mov ah,9hmov dx,seg a5 mov ds,dxmov dx,offset a5 int 21hjmp spartpart6:mov ah,1hint 21hcmp al,0dhje part61jmp errorpart61:mov ah,9hmov dx,seg a6 mov ds,dxmov dx,offset a6 int 21hjmp spartpart7:mov ah,1hint 21hcmp al,0dhje part71jmp errorpart71:mov ah,9hmov dx,seg a7 mov ds,dxmov dx,offset a7 int 21hjmp spartpart8:mov ah,1hint 21hcmp al,0dhje part81jmp errorpart81:mov ah,9hmov dx,seg a8 mov ds,dxmov dx,offset a8 int 21hjmp spartpart9:mov ah,1hint 21hcmp al,0dh je part91jmp errorpart91:mov ah,9hmov dx,seg a9 mov ds,dxmov dx,offset a9 int 21hjmp spartmov ah,4chint 21hcode endsend start二、学习本门课的体会(500字以)当我拿到汇编语言的书的时候,就觉得好难懂,它的代码不容易理解,可能看一句指令就需要翻几次前面的内容,汇编是一种比较低级的语言,不像C++或者C那样容易懂,汇编相对来说更像是一种机械的从人的语言到机器语言的过度,它涉及的内容几乎都和机器的构造有关系,碰到一些新的概念,比如寄存器,寻址方式等等,这些新的概念起初是不理解的,纯属是在书面上的,经过老师的讲解,用画图的方式很容易就明白了,所以呢,我认为学习汇编语言,就需要理解它的本质,进行形象化,这样就易于理解,更利于记忆汇编语言的一些指令或者专业名词基本上都是英文单词的缩写,所以我认为想要把汇编学的好,记住基本知识和指令,英语是必不可少的,当然有的时候也是有很凑巧的内容比如寄存器那里AX,BX,CX,DX等等,这些都利于记忆。
汇编语言大作业

上海电机学院大作业报告电子信息学院目录一、需求分析 (3)简介 (3)优点: (3)缺点: (3)特点: (4)功能: (4)二、程序设计 (4)2.1 要求内容 (4)2.2程序分析 (4)2.3流程图 (5)2.4源程序 (5)2.5测试分析......................................................................................... 错误!未定义书签。
三、心得体会 (6)一、需求分析简介汇编语言(Assembly Language)是面向机器的程序设计语言。
在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。
汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个组装的过程称为组合或者汇编。
因此,有时候人们也把汇编语言称为组合语言。
人类最容易接受自己每天都使用的自然语言。
为了使机器指令的书写和理解变得容易,需要借鉴自然语言的优点,为此就引入了汇编语言。
汇编语言使用符号来代表不同的机器指令,而这些符号非常接近于自然语言的要素。
基本上,汇编语言里的每一条指令,都对应着处理器的一条机器指令。
汇编语言包括两个部分:语法部分和编译器。
语法部分提供与机器指令相对应的助记符,方便指令的书写和阅读。
当然,汇编语言的符号可以被人类接受,但不能被处理器识别,为此,还要由汇编语言编译器将这些助记符转换成机器指令。
优点:1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
汇编语言作业

作业1:用汇编语言实现下列C功能:……char s[16];printf(“\nWhat is your name? ”);scanf(“%s”,s);printf(“\nMy name is %s\n”,s);……程序:stck segment stack 'stack'dw 32 DUP(?)stck endsdata segmentX DB 16,0,16 DUP(?)Y DB 0AH,'What is your name?$'Z DB 0AH,'My name is:$'data endscode segmentbegin proc farassume ss:stck,cs:code,ds:datapush dssub ax,axpush axmov ax,datamov ds,axMOV DX,OFFSET Y ;显示What is your name?并回车换行MOV AH,9INT 21HMOV DX,OFFSET X ;键入并显示字符串MOV AH,10INT 21HMOV BL,X+1 ;将’$’送入字符串后MOV BH,0MOV BX[X+2],'$'MOV DX,OFFSET ZMOV AH,9INT 21HMOV DX,OFFSET X+2 ;显示出结果MOV AH,9INT 21Hretbegin endpcode endsend begin作业2.从键盘上键入0~9中任意自然数N,将其立方值送显示器显示程序:stck segment stackdw 32 dup(?)stck endsdata segmentINPUT DB'PLEASE INPUT N(0~9):$'OUTPUT DB 0DH,0AH,'THE RESULT IS:$'LFB DW 00H,01H,08H,27H,64H,125H,216H,343H,512H,729HN DB ?data endscode segmentbegin proc farassume ss:stck,ds:data,cs:codepush dssub ax,axpush axmov ax,datamov ds,axMOV DX,OFFSET INPUT;显示输入提示信息MOV AH,9INT 21HMOV AH,1;键入并回显NINT 21HMOV N,AL;保留NAND N,0FH;立方表中的偏移量SHL N,1MOV BL,NMOV BH,0MOV CX,LFB[BX];查表得N立方的BCD形式MOV DX,OFFSET OUTPUT;输出提示信息MOV AH,9INT 21HAND CH,0FH;将百位转化ADD CH,30HMOV DL,CHMOV AH,2INT 21HMOV BL,CL;将十位转化SHR CL,4ADD CL,30HMOV DL,CLMOV AH,2INT 21HAND BL,0FH;将个位转化ADD BL,30HMOV DL,BLMOV AH,2INT 21Hretbegin endpcode endsend begin作业3从键盘输入一个无符号的十进制数(0~255),得到其实际数值后保存到bl中。
汇编语言程序设计期末大作业

汇编语言程序设计期末大作业一、引言汇编语言是一种低级语言,直接操作计算机硬件。
虽然汇编语言相对于高级语言来说更加底层,编写汇编语言程序可能需要更多的代码和时间,但其执行效率和对硬件的控制程度是高级语言无法比拟的。
本期末大作业旨在通过设计并编写一个汇编语言程序,巩固并应用所学的汇编语言知识。
二、设计目标本次大作业的设计目标为实现一个简单的文件加密和解密程序。
用户可以通过命令行指定需要加密或解密的文件,以及密钥。
程序将读取文件的数据,使用密钥进行加密或解密操作,并将结果保存到相应的加密或解密文件中。
三、功能设计1.加密文件:用户通过命令行参数指定待加密的文件和密钥,程序读取文件的数据,使用密钥对数据进行加密,并将结果保存到加密文件中。
加密算法可以自定,但必须保证加密后的文件无法通过简单方法还原。
2.解密文件:用户通过命令行参数指定待解密的文件和密钥,程序读取文件的数据,使用密钥对数据进行解密,并将结果保存到解密文件中。
解密算法应与加密算法对应,能够正确还原加密的文件。
四、实现思路1.程序入口:使用指令跳转和条件判断实现程序的命令行参数解析,根据用户输入的参数确定是进行加密还是解密操作。
2.文件读取和写入:使用相应的系统调用实现对文件的读取和写入操作。
通过指定的文件路径打开文件并读取文件的数据,然后将加密或解密后的结果写入相应的加密或解密文件。
3.密钥和数据处理:将读取到的文件数据与密钥进行处理(加密或解密),处理的方式可以是异或运算、位移操作等。
具体实现可以参考课程中学习到的汇编指令和技巧。
将处理后的数据写入加密或解密文件中。
五、编程与调试在开始编写程序之前,可以先分析并确定所需的汇编指令和算法。
在编写过程中,要注重代码的可读性和可维护性,使用注释对关键代码进行解释和说明。
编码完成后,应进行逐条指令的调试,可以使用调试器进行单步调试,查看代码的执行情况和计算结果是否正确。
六、参考资料1.操作系统与实验教程2.汇编语言程序设计教材3.汇编语言在线学习资源七、总结通过本次汇编语言程序设计期末大作业,我深入理解了汇编语言的编程思想和机器指令的执行过程。
汇编语言程序大作业(含源代码)

汇编语言程序大作业程序简介本程序的功能简单,是可以根据用户从键盘的不同输入,回显在显示器上不同的结果。
其实现的功能是当用户从键盘输入01至12之间的数时(一年12个月),程序能给用户返回其相应的月份的英文缩写符;程序的运行过程介绍1)当从编程环境按下运行按钮之后,屏幕上会显示如下一个窗口:图(1)提示使用者输入01至12之间的任一个两位数字,这里可以随意输入01至12之间的一个两位数字;2)这里从键盘输入如下图所示的数字接着按下回车键,则会显示用户所输入的数字的相应的月份的英文缩写,如下图所示:程序功能分析:本程序功能简单,仅有输入输出功能,即从键盘上输入一些数字并回车之后给使用者提示相应的信息,下面介绍程序中相应功能是如何实现的:第一,根据常规本程序没有涉及到子程序的概念,仅仅有照常的数据段和代码段而且同时把数据段定义为附加段;第二,在代码段里共有四个部分分别为主程序代码部分键盘输入部分设置部分和输出部分;下面分别介绍代码段里的各个部分代码段里的主程序部分:main proc farpush ds ;为返回而把ds保存到堆栈段sub ax,ax ;清空ax寄存器的内容push ax ;把0(清空后的ax的内容)推入堆栈段mov ax,DATASG ;mov ds,ax;把ax作为中间变量给数据段寄存器送入内存中数据段的首地址mov es,ax ;同时把该首地址送给附加段call input ;调用子程序input(输入子程序)call locate ;调用子程序locate(设置子程序)call display ;调用子程序display(输入子程序)ret ;返回main endp ;main主程序结束代码段里的键盘输入部分:input proc nearpush dx ;为保护dx而把其内容推入堆栈段lea dx,DSPLY1 ;为了让使用者知道程序一开始要输入什么,这里将把内存中数据段里的DSPLY1变量的首地址送给dx寄存器(专业的说法就是把DSPLY1的偏移地址送给了dx数据寄存器)mov ah,09h ;为了能显示DSPLY1变量里的字符串,故把09送给ah并之后中断一次int 21h ;DOS中断mov ah,0ah ;换行lea dx,MONIN ;把MONIN的偏移地址送给寄存器dxint 21h ;DOS中断mov ah,MONIN+2 ;把MONIN作为首地址后再加2以后的存储单元内容送ah mov al,MONIN+3 ;把MONIN作为首地址后再加3以后的存储单元内容送alxor ax,3030h ;清空ax的相应位置cmp ah,00 ;ah和00进行比较(主要确定键盘所输入的数字是否在01-09之间)jz return ;若ah的内容确实为0则跳到return标签处sub ah,ah ;若ah的内容不为零则清空ahadd al,10 ;之后al的内容相加10存入alreturn:pop dx ;重新从堆栈段弹出dxret ;返回input endp设置部分locate proc nearpush si ;保存si寄存器的内容(推入堆栈段)push di ;保存di寄存器的内容(推入堆栈段)push cx ;保存cx寄存器的内容(推入堆栈段)lea si,MONTAB ;把MONTAB的偏移地址送给si寄存器dec al ;al的内容减一(为建立一个表)mul THREE ;ax和数据段中的THREE变量进行相乘add si,ax ;之后si和ax的内容进行相加mov cx,03 ;把03送入cx寄存器cld ;为循环的方向做确定(定义方向为从左到右进行扫描)lea di,ALFMON ;把数据段中变量ALFMON的偏移地址送给di寄存器rep movsb ;进行以字节为单位的扫描pop cx ;从堆栈段弹出cxpop di ;从堆栈段弹出dipop si ;从堆栈段弹出siret ;返回locate endp输出部分display proc nearpush dx ;为保护dx的内容而把dxlea dx,DSPLY2 ;为了解释最后显示的结果,故把建立在数据段里的DSPLY2变量的首地址送给了dx寄存器,也就是把DSPLY2的偏移地址送给了dx寄存器mov ah,09h ;为了能够显示字符串故把09h送给了ah,并之后中断了一次int 21h ;DOS中断lea dx,ALFMON ;把ALFMON的偏移地址送给dx寄存器mov ah,09 ;为了屏幕上显示字符串int 21hpop dx ;从寄存器弹出dxretdisplay endp下面介绍数据段的定义:DATASG SEGMENT PARA 'DATA'THREE DB 3MONIN DB 3,4 DUP(?)ALFMON DB'???','$'MONTAB DB'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DE C'DSPLY1 DB'Plaese input two numbers(01-12): $'DSPLY2 DB'Your input month is: $'DATASG ENDS本程序的缺点是没办法连续地输入来确定不同的月份,而且是简单的基本输入输出功能的程序,尽管如此本人还是设计出了此程序。
汇编语言课设大作业

题目一通用进制转换程序一、题目要求实现不同进制之间的相互转换。
(常用进制二、八、十、十六进制)程序功能:1.能通过键盘输入任一种进制,有相应的提示信息。
例如please input a Binary data:2. 输入的数据要有容错检测。
例如:输入的二进制数据为1200,则应该出现错误信息提示。
(因为2在二进制中是不允许的3.输出的数据要有进制选择。
例如:请选择输出数据的进制(0: 二进制,1: 八进制……)二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。
题目二两位数加减乘除程序一、题目要求实现任意两位数+、-、×、÷运算。
程序功能:1.通过键盘输入一个算式,有相应的提示信息。
例如请输入一个两位数的+-×÷运算算式:2. 输入的数据要有容错检测。
例如:输入的数据为12*500,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。
例如:12/6 = 2二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。
题目三高精度乘法程序设计一、题目要求实现高精度乘法运算。
程序功能:1.通过键盘输入任意两个正整数,有相应的提示信息。
例如请输入两个任意正整数:2. 输入的数据要有容错检测。
例如:输入的数据为12*500.45,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。
二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。
汇编语言程序设计大型作业

2009 汇编语言程序设计大型作业题目一、作业题目2009年汇编语言程序设计大型作业给出了4道题目,供大家凭自己的兴趣自由选择其中之一完成。
这4道作业题目如下:1.汉字显示程序2.矩阵乘法程序3.计算器程序(WIN32 ASM编程)4.万年历程序(WIN32 ASM编程)本汇编语言程序设计大型作业题目可以在汇编网站中选择进入“汇编语言教学网站->资料下载”下载。
我们会在该网站论坛上答疑,以帮助大家更好的完成这次程序设计大型作业。
二、交付的文档材料1.程序系统说明书内容包括:(1)程序系统总体的功能模块调用图及模块功能说明。
(2)程序系统的详细框图(每个子程序的流程图)。
(3)程序界面图。
(4)程序清单。
2.设计和实现的技术特点、不足和改进的建议3.课程设计的体会。
4.程序源程序和可执行程序三、评分说明独立完成:60分,雷同或抄袭者不及格;设计技术及技巧使用:25分;文档质量:10分;按时完成:5分。
可以自主扩充功能,有创新加分。
四、参考书1.课本2.《IBM-PC汇编语言程序设计》清华大学出版社五、交付时间:课表安排上机时间结束后的10天内。
题目一汉字显示程序一、题目要求编写一个汉字显示程序,根据字库文件显示汉字。
程序功能:1.从键盘输入汉字区位码;2.从磁盘上读取汉字点阵;3.在屏幕上显示汉字;4.从键盘输入放大倍数,在屏幕上显示放大的汉字。
二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.INT 21H系统功能调用中有关文件的操作。
4.综合解决问题的能力。
三、参考材料以上网址可下载字库文件chs16.fon。
下面介绍一下相关知识:1.汉字的机内表示根据我国对汉字使用频度的研究,可把汉字划分为高频字(约100个),常用字(约3000个),次常用字(约4000个),罕见字(约8000个)和死字(约45000个)。
也就是说,正在使用的汉字字种达15000多个。
我国于l981年5月1日起实施的《信息交换用汉字编码字符集(基本集)》GB2312—80国家标准中,把高频字、常用字和次常用字归结为汉字基本字符集(共6763个字),再按出现的频度分为一级汉字3755个(按拼音排序)和二级汉字3008个(按汉字部首排序),加上一般符号(西文字母、数字和图形符号等)700个,共8000多个。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁师范大学计算机与信息技术学院综合性实验报告课程名称:汇编语言实验题目:菜单程序设计学生姓名:孙蕾专业:计算机科学与技术学号:20101118050005实验日期: 2012.5.10实验成绩:一、实验目的设计菜单程序,实现各种功能,设计分支程序,重键盘输入字符。
二、实验内容(1)参考示例5-8设计菜单程序,包含示例5-2、示例5-3及退出三个菜单项。
将示例5-2改为从键盘输入X;示例5-3增加显示功能,显示出统计个数。
(P120、P101、P106)(2)选作:参考P213第9章示例9-3,在屏幕上清屏、开窗口,将菜单程序带颜色地显示在窗口中。
提示:可利用P223宏库9-4.mac中的功能。
三、实验过程(含结果抓图)1.输入程序代码data segmentx dw ?y dw ?cc db 0ah,0dh,'Y=$'mess0 db 0ah,0dh,0dh,'****************MENU******************' db 0ah,0dh, '*1. calculate Y=5X-18: *' db 0ah,0dh, '*2. count the numbers of a string: *' db 0ah,0dh, '*3. exit *' db 0ah,0dh, '*^^ please select... *' db 0ah,0dh, '**************************************' db 0ah,0dh,' $'mess1 db 0ah,0dh,0dh,'please input a string :$'c db 0ah,0dh,0dh,'please input a number :$'mess2 db 0ah,0dh,'numb:$'mess3 db 0ah,0dh,'capi:$'mess4 db 0ah,0dh,'lett:$'mess5 db 0ah,0dh,0dh,'thank you for using!!$'numb db 10 dup(?)capi db 10 dup(?)lett db 10 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlet0:mov dx,offset mess0mov ah,9int 21hint 21hcmp al,'1'jz prog1cmp al,'2'jz prog2jmp prog3prog1:mov ax,datamov ds,axmov dx,offset c mov ah,9int 21hinx:mov ah,1int 21hcmp al,30hjl inxcmp al,3Ahjnl inxsub al,30hmov ah,0mov x,axmov al,5imul xsub ax,18jns letaneg axleta:mov y,axmov cx,0mov bx,10letb:mov dx,0inc cxidiv bxpush dxcmp ax,0jnz letbmov dx,offset cc mov ah,9int 21hletc: pop axadd ax,0030hmov dl,alint 21hdec cxcmp cx,0jnz letcjmp let0prog2:mov ax,datamov ds,axmov dx,offset mess1 mov ah,9int 21hlet1:mov ah,1int 21hcmp al,0dhjz exit1test al,40hjz let2test al,20hjz let3mov lett[bx],alinc bxjmp let1let3:cmp al,5ahja exit1mov capi[si],alinc sijmp let1let2:cmp al,'0'jb exit1cmp al,'9'ja exit1mov numb[di],alinc dijmp let1exit1:mov ax,datamov ds,axmov dx,offset mess2 mov ah,9int 21hadd di,30hmov dx,dimov ah,2int 21hmov dx,offset mess3int 21hadd si,30hmov dx,simov ah,2int 21hmov dx,offset mess4 mov ah,9int 21hadd bx,30hmov dx,bxmov ah,2int 21hjmp let0prog3:mov dx,offset mess5 mov ah,9int 21hmov ah,4chint 21hcode endsend start2.进行代码调试四、实验结果分析(运行过程中出现的问题、如何解决的;实验过程中的经验及教训)1.记不住关键的程序命令,每次再想执行的之后得看书之后输入。
2.菜单分支名称重复,很容易记错,跳转出错。
五、实验拓展1.代码:include 9-3.macdata segmentx dw ?y dw ?cc db 0ah,0dh,'Y=5x-18=$'mess0 db 0ah,0dh,0dh,'****************MENU******************'db 0ah,0dh, ' *1. calculate Y=5X-18: *'db 0ah,0dh, ' *2. count the numbers ofa string: *'db 0ah,0dh, ' *3. exit *'db 0ah,0dh, ' *^^ please select... *'db 0ah,0dh, '**************************************'db 0ah,0dh,' $'mess1 db 0ah,0dh,0dh,'please input a string :$'c db 0ah,0dh,0dh,'please input a number :$'mess2 db 0ah,0dh,'numb:$'mess3 db 0ah,0dh,'capi:$'mess4 db 0ah,0dh,'lett:$'mess5 db 0ah,0dh,0dh,'thank you for using!!$'numb db 10 dup(?)capi db 10 dup(?)lett db 10 dup(?)mess db 29,32 dup(?)cont db ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axclearscclearswreptt:mov ah,2mov dh,8mov dl,30mov bh,0int 10hmov ah,9mov dx,offset mess0int 21hlet0:mov ah,1int 21hcmp al,'1'jz prog1cmp al,'2'jz prog2jmp prog3prog1:mov ax,datamov ds,axmov dx,offset c mov ah,9int 21hinx:mov ah,1int 21hcmp al,30hjl inxcmp al,3Ahjnl inxsub al,30hmov ah,0mov x,axmov al,5imul xsub ax,18jns letaneg axleta:mov y,axmov cx,0mov bx,10letb:mov dx,0inc cxidiv bxpush dxcmp ax,0jnz letbmov dx,offset cc mov ah,9int 21hletc: pop axadd ax,0030hmov dl,almov ah,2int 21hdec cxcmp cx,0jnz letcjmp let0prog2:mov ax,datamov ds,axmov dx,offset mess1 mov ah,9int 21hlet1:mov ah,1int 21hcmp al,0dhjz exit1test al,40hjz let2test al,20hjz let3mov lett[bx],alinc bxjmp let1let3:cmp al,5ahja exit1mov capi[si],alinc sijmp let1let2:cmp al,'0'jb exit1cmp al,'9'ja exit1mov numb[di],alinc dijmp let1exit1:mov ax,datamov ds,axmov dx,offset mess2 mov ah,9int 21hadd di,30hmov dx,dimov ah,2int 21hmov dx,offset mess3 mov ah,9int 21hadd si,30hmov dx,simov ah,2int 21hmov dx,offset mess4 mov ah,9int 21hadd bx,30hmov dx,bxmov ah,2int 21hjmp let0prog3:mov dx,offset mess5 mov ah,9int 21hmov ah,4chint 21hcode endsend start9-3.mac:clearsc macromov ah,06hmov al,0mov bh,0f0hmov ch,0mov cl,0mov dh,23mov dl,79int 10hmov dx,0mov ah,2int 10hendmclearsw macromov ah,06hmov al,0mov bh,27hmov ch,8mov cl,30mov dh,22mov dl,66int 10hendm2.运行结果。