汇编习题答案
更新时间:2023-10-21 10:27:01 阅读量: 综合文库 文档下载
- 汇编语言推荐度:
- 相关推荐
;
; 教材课课后习题3-27
;编制程序完成两个已知双精度数(4字节)A和B相加并将结果存入双精度变量单元SUM中(不考虑溢出)。 ;
.model small .stack .data A DD 12345678h B DD 11111111h SUM DD ? .code .startup mov ax ,word ptr A[0] ;注意:变量都为双字类型,所以与字类型寄存器相加要临时改变类型 mov dx ,word ptr A+2 add ax ,word ptr B[0] adc dx ,word ptr B[2] mov word ptr SUM[0],ax mov word ptr SUM[2],dx .exit 0 End ;
; 教材课课后习题3-28 ;编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出)。 ;
.model small .stack .data
X db 1h,1h,01h,1h,1h,01h,1h,01h,1h,1h
SUM dw ? ;注意:题目要求是字节类型,不考虑溢出。但这里使用的是字类型 .code .startup
mov cx,10 xor ax,ax ;mov ax,0 mov bx,offset x again: add al,[bx] adc ah,0 ;将数组中的数据累加到AX,注意AH的处理。 inc bx loop again
mov SUM,ax .exit 0 End ;
; 教材课课后习题4-10
;设变量bufX为有符号16位数,请将它的符号状态保存在signX,即:如果X大于等于0,保存0;如果X小于0,保存-1(ffh)。编写该程序。 ;
.model small .stack .data
bufx dw 8111h ;样例数据,可以随便改。但最好分别取正、负数进行测试 signx db ? .code .startup mov ax,bufx test ax,8000h ;测试符号位 jnz next1 mov signx, 0 jmp out1 next1: mov signx,0ffh out1: mov bl,signx .exit 0 End ;
; 教材课课后习题4-15
;不用串操作指令求主存0040h : 0开始的一个64KB物理段中共有多少个空格? ;
.model small .stack
.data .code .startup mov ax,0040h mov ds,ax ;将段地址0040送到DS mov si,0 xor bx,bx ;用BX计数空格的次数 mov cx,0 ;CX初值为0,则最多可进行64K次循环 again: cmp byte ptr[si],' ' jnz do add bx,1 do: inc si dec cx jnz again ;这两句可改为loop again ;程序运行结束后,次数在BX中,用R命令查看BX的值即可。 .exit 0 End ;
; 教材课课后习题4-16
;编程实现把键入的一个字符,用二进制形式(0 / 1)显示出它的ASCII代码值。 ;
.model small .stack .data .code .startup mov ah,01h int 21h ;输入一个字符 mov bl,al ;因为系统调用要用到al寄存器,所以移位时不用al mov cx,8 again: shl bl,1 ;向左移位,将最高位移入CF标志位 jc one mov dl,'0' jmp two one:mov dl,'1'
two:mov ah,02h ;思考一下,如果用单分支如何实现? int 21h loop again .exit 0 end ;
; 教材课课后习题4-18
;编写程序,将一个包含有20个有符号数据的数组arrayM分成两个数组:
;正数数组arrayP和负数数组arrayN,并分别把这两个数组中的数据个数显示出来。 ;
.model small .stack .data arraym db 1,-2,3,-4,5,-6,-7,-8,9,10,11,-12,-13,-14,-15,16,17,-18,19,-20 arrayp db 20 dup(?) arrayn db 20 dup(?) p db 0 ;用于计数正数个数 n db 0 ;用于计数负数个数 .code .startup mov si,offset arraym mov di,offset arrayp mov bx,offset arrayn mov cx,20 cld mov ax,ds mov es,ax go: lodsb test al,80h jnz arn stosb
inc p jmp again arn: xchg bx,di ;用DI指向负数数据,因为串指令STOSB规定用其作为指针 stosb inc n xchg bx,di again: dec cx jnz go ;可用LOOP指令代替
;以下代码输入正数的个数 mov dl,'+' ;提示为正数个数 mov ah,2 int 21h mov al,p mov ah,0 mov bl,10 div bl ;余数在ah,商在al add ax,3030h mov dh,ah mov dl,al mov ah,2 int 21h mov dl,dh mov ah,2 int 21h
;以下代码输入负数的个数 mov dl,'-' ;提示为正数个数 mov ah,2 int 21h mov al,n mov ah,0 mov bl,10 div bl ;余数在ah,商在al add ax,3030h mov dh,ah mov dl,al mov ah,2 int 21h
mov dl,dh mov ah,2 int 21h
;思考:显示正、负数个数,用子程序如何实现?? .exit 0 end ;
; 4-19参考代码。
;编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),
;则保存其和到wordsum,如超过则显示‘overflow’。 ;
.model small .stack .data
count=10 ;本题以十个数为例 array dw 1234h,0fff0h,1h,2h,3h,3h,4h,5h,6h,7fh wordsum dw ?
string1 db 'overflow','$' .code .startup mov si,offset array mov cx,count cld xor bx,bx again: lodsw ;也可以不用串操作,采用直接寻址,请思考如何实现 add bx,ax jc over ;如果发生溢出则显示错误信息,注意:jc用于无符数,jo用于带符号数 loop again jmp next over: mov ah,09h mov dx,offset string1
int 21h jmp last next: mov wordsum,bx last: .exit 0 End ;
; 教材课课后习题4-27
;请按如下子程序说明编写过程:
;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数
;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码
;出口参数:AL=对应的二进制数 ;
.model small .stack .data
decimal db 31h,31h binary db ? .code .startup mov dh,decimal+1 ;设置入口参数 mov dl,decimal call chang mov binary,al ;从出口参数取结果 .exit 0
;功能:把用ASCII表示的2位十进制数转换为对应的二进制数
;入口参数:DH,DL为两上ASCII码表示的十进制数
;出口参数:AL为对就应的二进制数 chang proc near sub dh,30h ;字符型的十进制数转换成数值型数据 sub dl,30h mov al,dh mov bl,10 ;十位要乘于10,再与个位相加 mul bl add al,dl
ret chang endp end ;
; 教材课课后习题4-28
;写一个子程序,根据入口参数AL=0/1/2,分别实现对大写字母转换成小写、小写转换成大写或大小写字母互换。 ;欲转换的字符串在string中,用0表示结束。 ;
.model small .stack .data msgSource db 'soure string is:',0dh,0ah,'$' msgDestination db 'Destination string is:',0dh,0ah,'$' msgPrompt db 0dh,0ah,'please choose: 0-toLower 1-toUpper 2-exchange',0dh,0ah,'$' ;相当于一个菜单 source db 'MASM is great!',0,0dh,0ah,'$' destination db 20 dup(?),0dh,0ah,'$' string1 db 'please input a number(0 ,1,2):','$' .code .startup
;显示提示信息 mov ah,09h mov dx,offset msgSource int 21h ;显示原字符串 mov ah,09h mov dx,offset source int 21h ;显示输入提示信息 mov ah,09h mov dx,offset msgPrompt int 21h
again: mov ah,01h ;输入选择 int 21h
cmp al,30h ;判断是不是0-2中的数字,如果不是,重新输入 jz goon cmp al,31h jz goon cmp al,32h jnz again
goon: and al,0fh ;设定入口参数,注意:约定存储单元不用设定 call change ;调用子程序 ;显示提示信息 mov ah,09h mov dx,offset msgDestination int 21h ;显示目的字符串 mov ah,09h mov dx,offset destination int 21h .exit 0
;功能: ;入口参数:al=0-转换为小写 1-转换为大写 2-大小写互换
; source(存储单元) ;入口参数:destination(存储单元)
change proc ;子程序开始 mov si,offset source ;si指向原串 mov di,offset destination ;di指向目的串 cmp al,2h ;根据入口参数AL,决定做何转换 jz exchange cmp al,1h jz toUpper toLower: ;大写字母变成小写字母(输入0) mov al,[si] or al,al jz done cmp al,'A' jb next cmp al,'Z' ja next add al,20h next: mov [di],al inc si inc di jmp toLower
toUpper: ;小写字母变成大写字母(输入1) mov al,[si] or al,al jz done cmp al,'a' jb next1 cmp al,'z' ja next1 sub al,20h next1: mov [di],al inc si inc di jmp toUpper
exchange: ;大写字母变小写,小写子母变大写(输入2) mov al,[si] or al,al jz done cmp al,'A' jb next2 cmp al,'Z' ja to add al,20h jmp next2 to:
正在阅读:
汇编习题答案10-21
乐清市城镇供水水源规划 - 图文10-14
水泥水化机理05-25
关于祝贺升职的情景会话02-12
基于局域网的教学模式及实现03-08
七年级语文下册期中考试题12-09
公路局2020年工作总结及下步工作打算08-22
动车组答案10-09
浙江省杭州第七中学2014年“十件大事”07-09
我喜欢旅游作文700字07-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 汇编
- 答案
- 公司法案例分析与讨论
- 建设项目前期工作--办理需要的手续
- 乡村少年宫现场观摩解说词
- 东大14秋环境工程学B卷答案
- 2016年农业行政执法基本文书格式(模板)(2017word)
- 国际汇兑与结算技能操作与案例分析真题
- 2014年黑龙江省公务员考试报考问题指导
- 大学物理学(第三版)第五章课后答案(主编)赵近芳
- 2014国家公务员考试模拟练习 - 10月11日每日一练
- PGG作文例文及错误
- 2015年造价员考试基础知识(题库量大)
- 一位大学老师写给大学新生的100条肺腑之言
- 原发性肝癌试题
- 保定刑事辩护资深大律师-- 重视量刑因素确保罪刑相当
- 珩磨机的工作原理
- 投标物资运达施工现场后的保护措施和要求(1)
- 线性代数习题1-4作业与解答(同济五版)
- 初三数学培优 - 垂径定理+圆中的角
- 333教育综合 - 名词解释
- 河北省唐山一中2016-2017学年高二上学期12月月考理科数学试题Word版含答案 doc