汇编大题

1.用主,子程序结构编写一个程序,计算sun = 1!+2!+3!+4!+5!

答案:

; 数据段

data segment

sum dw 0

data  ends

;程序段

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

xor ax,ax

xor cx,cx

mov cl,5

xunhuan1:

call fact

add sum,ax

loop xuanhuan1

mov ah,4ch

int 21h;

fact proc

push cx;

xor ax,ax

mov al,1

xunhuan 2:

mul al,cl

loop xunhuan2

pop cx

ret

fact endp

code ends

end start

2 .将一个给定的二进制数按位转换成相应的ascII码字符串,送到指定的存储单元并显示,如二进制数1001 0011 转换成字符串‘1001 0011’。要求将转换过程写成子程序,

并且子程序应具有较好的通用性,而且必须能实现对8位和16位二进制数的转换。

答案:

data segment

num8 db 93h

num16 dw 0abcdh

ascbuf db 20 dup (0)

data ends

code segment

assume ds:data,cs:code,ss:stack

start:

mov ax,data

mov ds,ax

xor dx,dx

mov dl,num8

mov cx,8

lea di,ascbuf

call fact

mov [di],byte ptr odh

mov [di+1],byte ptr 0ah

mov [di+2],byte ptr ‘$‘

lea dx,ascbuf

mov ah,09h

int 21h

mov dx,num16

mov cx,16

lea di,ascbuf

call fact

mov [di],byte ptr 0dh

mov [di+1],byte ptr 0ah;

mov [di+2],byte ptr ‘$‘

lea dx,ascii

mov ah,09h

int 21h

fact proc

push ax

cmp cx,8

jne L1

mov dh,dl

L1:

xor al,al

rol dx,1

rcl al,1

add al,30h

mov [di],al

inc di

loop L1

pop ax

ret

fact endp

code ends

end start

3.用存储单元传送参数,编写一个子程序,将二位十六进制数转换为对应的ascII码,并说明主程序是如何调用这个子程序的。

答案:

data segment

hexdata db ?

ascdata db 2 dup (?)

data ends

code segment

assume cs:code,ds:data,ss:stack

start:

mov ax,data

mov ds,ax

mov hexdata,xxx

call fact

fact proc

push cx

mov ch,hexdata

and ch,0fh

add ch,30h

cmp ch,09h

hna hex1

add ch,07h

hex1:

mov ascdata,ch

mov ch,hexdata

mov cl,4

shr ch,cl

add ch,30h

cmp ch,39h

jna hex2

add ch,07h

hex2:

mov ascdata+1,cl

pop cx

ret

fact endp

code ends

end start

逻辑指令

逻辑左移SHL(Shift Logical Left)和逻辑右移SHR(Shift Logical Right)

格式:SHL(或SHR) OPR,CNT

逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补0。

算术指令

SAL(shift arithmetic left) 算术左移

格式:SAL OPR,CNT

含义: 算术左移SAL把目的操作数的低位向高位移,空出的低位补0.

(指将要移位的操作数换成二进制表示方法,如62H为01100010B.移位时只是寻常理解中的将这些二进制位逐个向左或向右移,移走的数根据操作符决定舍弃或者放入空出的位置,空出的位置根据操作符决定补0或者放入移走的数)。

SAR(shift arithmetic right) 算术右移

格式:SAR OPR,CNT

算术右移SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补。

如62H二进制表示法为01100010B,最高位为0,无论右移多少位左边都用0补上。如果最高位是1,则都用1补上。

循环移位指令

循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。

格式:ROL(或ROR) OPR,CNT

循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。可以理解为蛇咬尾巴型循环。

带进位的循环左移RCL(Rotate Left Through Carry)和带进位的循环右移RCR(Rotate Right)。

格式:RCL(或RCR) OPR, CNT

带进位的循环左移/右移指令只有移位的方向不同,它们都用原CF的值填补空出的位,移出的位再进入CF。

注:受影响的标志位:CF和OF。

以上算术,循环和逻辑移位指令均可以作字或字节的操作,386及其后继机型还可作双字操作。

汇编大题

时间: 2024-10-10 16:52:51

汇编大题的相关文章

2015腾讯笔试大题

今天做完腾讯的在线笔试,感觉自己弱爆了,选择题部分考得比较基础,但是考的面比较广,数据结构,计算机网络,算法常识,概率题,C,C++,都有.大题如下: 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code).请编写一个函数,使用递归方法生成N位的格雷码,并且保证这个函数的健壮性. 2. 有下图的题解,请用C/C++代码来列出满足下图0-100内的所有答案. 3. 如图所示,系统中有三个进程Producer,Transmitter和Consumer.

复旦大学数学学院高等代数历届期中考试大题精选(未完待续)

本文收集了从 2009 年至今复旦大学数学学院高等代数历届期中考试精选的大题, 其中有的大题由习题课老师或任课老师自编而来, 有的大题由其他大学的教材或学习指导书中的题目或考研试题改编而来, 也有相当部分的大题已经融入到复旦高等代数学习指导书 (第三版) 中了. 这里我们将不会公布这些精选大题的解答, 但会附加一些注解, 以供读者参考. 本科 16 级高代 I 期中考试 四.(10分)  设 $A=(a_{ij})$ 是 $n$ 阶非零实矩阵, 其中 $n\geq 3$ 为奇数. 设 $A_{i

蓝桥杯省赛编程大题——骰子问题

作为第二道编程大题,难度也没有想象中那么难.只怪我当时没有认真的静下心来仔细的理解题目意思.连样例都没有看懂,高数课闲来无事,便静下来认真想了一下. 大致的题目意思是给你n个骰子,让你堆起来,并且告诉你有一些面是不能靠在一起的.问你总共有多少总方案数.(骰子规定1和4相对,2和5相对,3和6相对) 输入n m 表示骰子的个数和不能靠在一起的个数. 输入m行,每行两个数a b 表示a和b两面不能靠在一起. 输出一行方案数,数据较大请模100000000+7; 样例输入: 2 1 1 2 样例输出:

2014年阿里巴巴在线笔试题-第3大题-公共最长字符串长度

说明 2014年阿里巴巴在线笔试题-第3大题    首先,我没参加这次的阿里巴巴在线笔试题,题目全部是从别人口中描述而来,对于以下的分析,如果有什么不对的地方还望指教.也希望大家能够有更好的办法,希望大家来能不吝赐教. 题目描述 给定一个主字符串和一个匹配字符串,现在问你,找出 "主串中可匹配到的匹配串中子串的最大长度",可能比较绕,举个例子吧 主字符串       abcdefgsdff     记为A 匹配字符串   abefgf               记为B 要求的值就是 

算法笔记_125:算法集训之编程大题集一(Java)

 目录 1 砝码称重 2 公式解析 3 购物券消费方案 4 机器人行走 5 角谷步数 6 矩形区域的交和并 7 矩阵变换加密法 8 控制台表格 9 拉丁方块填数字 10 立方和等式   1 砝码称重 5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要求编程实现:对用户给定的重量,给出砝码组合方案. 例如: 用户输入: 5 程序输出: 9-

第一阶段测试题大题整理(冒泡排序,去重,万年历)以及改错--2017-03-26

1.冒泡排序法: 五星级重点 <script> var arr=Array(); for(var i=0;i<=5;i++){ var j=prompt("请输入第"+i+"个数"); j=parseInt(j); arr.push(j); } for(var x=0;x<arr.length;x++){ for(var y=x+1;y<arr.length;y++){ if(arr[x]<arr[y]){ var temp=ar

2014马哥Linux0218-4中shift轮替和最后一道大题

写一个脚本,使得无论脚本后跟多少参数,都能计算出参数的和: #!/bin/bash sum=0 for i in `seq 1 $#`;do let sum+=$1 shift done echo $sum 写一个脚本:使用形式如下 userinfo.sh -u username [-v{1|2}] -u选项用于指定用户,而后脚本显示用户的UID和GID; 如果同时使用了-v选项: -v后面的值如果是1,则额外显示用户的家目录路径 -v后面的值如果是2,则额外显示用户的家目录路径和shell #

2015考研计算机真题大题信号量进程同步问题

哈哈哈,拿到考研的题目来考考你们,看看你们做的出来不,谁让我是正在考计算机研究生的筒子,希望能马上加入研发团队,毕竟我那么想当个技术宅. 45. 有A.B两人通过信箱进行辩论,每人都从自己的信箱中取得对方的问题.将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中,设A的信箱最多放M个邮件,B的信箱最多放 N个邮件.初始时A的信箱中有x个邮件(0<x<M). B 中有y个(0<y<N).辩论者每取出一个邮件,邮件数减1.A.B两人操作过程:Code BeginA{While(TR

百度软件开发笔试大题3

对表达式求值.已知运算符只有加减乘除,无负数,结果也不是负数.(类似逆波兰法的算法思路) 思想:对数字只要入栈就可以,需要时拿出来计算.对符号,有几种情况: (1)新符号加入前符号栈中还没有符号,则直接入栈: (2)新符号是加减运算,则将之前符号栈中的符号全部拿出来计算,每次消耗1个符号,2个数字,再将得到的结果压入数字栈: (3)新符号是乘除,之前的符号也是乘除,则只需要消耗一个符号就行: (4)新符号乘除,原来符号加减,则符号压栈即可. Eg. 1+4*5+2*3,定义两个栈分别存数字和符号