记录一下在学习汇编的过程中遇到的有意思的习题

2021/10/05
1.编写程序向内存0:200~0:23F依次传送数据0~63。

assume cs:code
code segmentstart:mov ax,0H    mov ds,ax    ;ax=ds*16+bxmov bx,200H  ;十六进制mov dx,0     ;初始化累加器dx=0mov cx,64    ;设置循环次数64s: mov ds:[bx],dl  inc dl       ;dx自增inc bx       ;bx自增 ds:bx指向下一个单元loop smov ax,4c00Hint 21H
code ends
end start



2021/10/07
2.计算ffff:0~ffff:b单元中的数据的和,结果存放在dx中

;计算ffff:0~ffff:b单元中的数据的和,结果存放在dx中
assume cs:code
code segmentstart: mov ax,0ffffhmov ds,ax     ;设置段地址mov bx,0      ;ds:bx指向 ffff:0mov dx,0      ;设置累加器dx=0mov cx,0bH  ;循环12次s:mov al,[bx]    mov ah,0add dx,ax       ;dx=(ds)*16+bxinc bx          ;ds:bx指向下一个单元loop smov ax,4c00Hint 21H
code ends
end start

2021/11/1

3.试编写一程序计算以下表达式:
(提示:可以采用移位指令或者乘除法指令)
Z=(3X十Y-5)/2

;Z=(3X十Y-5)/2
assume cs:code,ds:data
data segment VARX dw 15VARY dw 10VARZ dw  ?
data endscode segment
start:mov ax,datamov ds,axmov ax,VARX       ;ax<-xshl   ax,1        ;ax<-ax*2add ax,VARX       ;ax<-ax*2+axadd ax,VARY       ;3*x+ysub ax,5          ;3*x+y-5shr ax,1          ;(3X十Y-5)/2mov VARZ,axmov ax,4c00hint 21h
code ends
end start

4.设AL寄存器的初值为0A9H,将AL寄存器中的8位数分成2组,每组4位,编程实现把这两组数从高到低分别放在AL、BL中。

assume cs:code
code segment
start:mov ax,0A9Hmov bl,0AHdiv blmov bl,ah    ;bx=0009Hmov ax,0A9Hmov cl,4shr al,cl   ;al=000AHmov ax,4c00hint 21h
code ends
end start

2021/11/2

5.《汇编语言》王爽第四版,检测点9.1(1)(2)
(1)若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据

assume cs:code
data segmentdata ends
code segmentstart:mov ax,datamov ds,axmov bx,0jmp word ptr [bx+1]code ends
end start

指向第一条指令,则要使IP的值为0000H即可,而jmp word ptr为段内转移指令,相当于把IP值赋值为后面内存单元的值,故只需要第一个字节为0即可。

assume cs:code
data segmentdb 4 dup(0)
data ends
code segmentstart:mov ax,datamov ds,axmov bx,0jmp word ptr [bx+1]code ends
end start

调试

(2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令

assume cs:code
data segmentdd 12345678H
data ends
code segment
start:mov ax,datamov ds,axmov bx,0mov [bx],bxmov [bx+2],csjmp dword ptr ds:[0]mov ax,4c00Hint 21H
code ends
end start

执行jmp指令后指向第一条指令,CS段没有改变,只需要改变IP值为0000H。而段间转移相当于把内存地址开始的前两个字节赋值给IP,后面的两字节赋值给CS
调试

2021/11/08

6.编程实现以下功能:双字变量A,B,相加结果放入双字变量C中,相减结果放入双字变量D中。

assume cs:code,ds:data
data segmentA dd 12345678H       B dd 98765432H       C dd ?               D dd ?
data endscode segment
start:mov ax,datamov ds,axmov si,0clcmov cx,2s:mov ax,word ptr [A+si]adc ax,word ptr [B+si]mov word ptr [C+si],ax   inc siinc siloop sclcmov si,0mov cx,2s0:mov ax,word ptr [A+si]sbb ax,word ptr [B+si]mov word ptr [D+si],axinc siinc siloop s0mov ax,4c00hint 21h
code ends
end start

7.编程实现功能两个128位数据相加

assume cs:code;ds:data
data segmenta dw 1,2,3,4,5,6,7,8b dw 8,7,6,5,4,3,2,1c dw 8 dup(0)
data ends
code segmentstart: mov ax,datamov ds,axclc            ;清除标志位CF的值mov si,14mov cx,8s:mov ax,ds:a[si]adc ax,ds:b[si]   ;ax=ax+b[si]+cFmov ds:c[si],axdec sidec si                   ;sub si,2loop smov ax,4c00Hint 21H
code ends
end start

8.在数据段内连续存放着10个字节型无符号二进制数,编写一段程序,求出该10个数之和,并将结果存放在寄存器AX中。

assume cs:code,ds:data
data segmentA db 1B,10B,11B,110B,111B,101B,100B,1111B,1110B,1000B
data ends
code segment
start: mov ax,datamov ds,axmov ax,0mov si,0clcmov cx,10s:adc al,byte ptr [A+si]inc siloop smov ax,4c00Hint 21H
code ends
end start

2021/11/16

1.统计分数

assume cs:code,ds:data
data segment
Fenshu  db  80,45,60,77,88,99,58a     db  0B     db  0data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov cx,7s:cmp byte ptr[bx],60jb next           ;小于60转移到nextinc a           ;a=5jmp lastnext:inc Bjmp lastlast:inc bxloop smov ax,4c00Hint 21H
code ends
end start
  1. 编写一个程序,将包含任意字符,以0结尾的字符串的小写字母转变成大写字母。
assume cs:code,ds:data
data segmentdb "Today is a good day 0"
data endscode segment
start:mov ax,datamov ds,axmov bx,0s1:cmp byte ptr[bx],'0' je last     s2:cmp byte ptr[bx],'a'jb s5  s3:cmp byte ptr[bx],'z'ja  s5s4:sub byte ptr[bx],20Hs5:inc bxjmp s1
last:mov ax,4c00Hint 21H
code ends
end start

3.编写程序实现以下功能:字变量X与字变量Y比较大小(无符号数),如果大于则字变量z值为1;如果等于,则z值为0;小于则z为-1。

assume cs:code,ds:data
data segmentx dw 5y dw 7z dw 0
data ends
code segment
start:mov ax,datamov ds,axmov ax,xmov bx,y
s1:cmp ax,bx        ;不低于就转移jnb s2amov z,-1jmp last
s2:cmp ax,bx        ;不deng就转移jne s3mov z,0jmp last
s3:cmp ax,bx    mov z,1jmp last
last:mov ax,4c00Hint 21Hcode ends
end start

2021/11/23

  1. 假如变量定义如下:
    A DB 5,7,15
    SUM DW ?,?,?
    请编程实现分别求1+2+……+N(N的值分别从A中取),求和值放入到SUM中,其中求和过程用子程序实现。
assume cs:code,ds:data
data segmentA db 5,7,15sum dw ?,?,?
data ends
code segment
start: mov ax,datamov ds,ax mov si,0mov di,0mov cx,3s: mov ax,0mov bx,0call kalamov sum[di],axadd di,2inc si    loop smov ax,4c00Hint 21H
kala:clcadc ax,bxinc bxcmp bL,A[si]jna kalaret
code ends
end start

2.将数据段中定义的两位数据以十进制的形式分别保存到字符串变量CHAR1、CHAR2、CHAR3中。其中进制转串用子程序实现。
DATA SEGMENT
A DB 12,34,56
CHAR1 DW 2DUP(?)
CHAR2 DW 2DUP(?)
CHAR3DW 2DUP(?)
DATA ENDS

assume cs:code,ds:data
data segmenta db 12,34,56char1 dw 2 dup(0)char2 dw 2 dup(0)char3 dw 2 dup(0)
data ends
code segment
start:mov ax,datamov ds,axmov si,0mov di,0mov bl,10mov cx,3s: call dididimov char1[di],axinc siadd  di,2loop smov ax,4c00hint 21h
dididi:mov al,[si]mov ah,0div blretcode endsend start

3.请编写完整程序实现以下功能:设DAT单元存放一个0-9的字节数据,在sqrtab数据区存放了0-9的平方值,实现在sqrtab中查出DAT单元中数据的平方值,然后送入SQR单元,其中查表的方法用子程序实现
DAT DB 8
SQRTAB DB 0,1,4,9,16,25,36,49,64,81
SQR DB ?

assume cs:code,ds:data
data segment
dat db 8
sqrtab db 0,1,4,8,16,25,36,49,64,81
sqr db ?
data ends
code segment
start:mov ax,datamov ds,axs:mov al,datmov ah,0mov si,0mov si,axcall mmmov sqr,alloop smov ax,4C00Hint 21Hmm:mul datcmp al,sqrtab[si]jne mm      ;不等于就转移ret
code ends
end start


2021/12/14
编程输入一个字符串,将其原样输出

assume cs:code,ds:data
data segment
char1 db 11,0,11 dup(0)
char2 db 0AH,'$'
data ends
code segemnt
start:mov ax,datamov ds,axlea dx,char1[1]   ;指定入口参数mov ah,0AH           ;从键盘读入一个字符串int 21H                  ;入口参数DS:DXmov bl,char1[1]mov bh,0mov char1[bx+2],'$'lea dx,char2mov ah,09Hint 21H                    ;OAH换行,0DH回车lea dx,char1add dx,2mov ah,09Hint 21Hmov ax,4C00Hint 21H
code ends
end start

也有一种简单的写法,如下
不过这种写法比较笼统,没有考虑到输入的字符串与定义的字符串长度不一致的情况

assume cs:code,ds:data
data segment
char db 11,0,11 dup(0),'$'
data ends
code segment
start: mov ah,0AHlea dx,charint 21Hadd dx,2mov ah,09Hint 21Hmov ax,4c00Hint 21H
code ends
end start

持续更新中~~

汇编语言王爽---第四版相关推荐

  1. 汇编语言 王爽 第四版 第二章 检测点2.2

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点2.2 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH . 最小肯定是偏移地址为0, ...

  2. 汇编语言 王爽 第四版 实验5

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 实验5 编写.调试具有多个段的程序 1 编译连接下面程序,用debug加载.跟踪,回答问题. assume cs:code,ds:data, ...

  3. 汇编语言 王爽 第四版 实验1

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 文章目录 实验1 查看CPU和内存,用机器指令和汇编指令编程 1 开始执行命令: 2 指令 过程 3 4 实验1 查看CPU和内存,用机器指 ...

  4. 汇编语言 王爽 第四版 第三章 检测点3.2

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点3.2 1 补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中. mov ax,1 ...

  5. 汇编语言 王爽 第四版 第六章 检测点6.1

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点6.1 1 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序: assume cs:codesg cod ...

  6. 汇编语言 王爽 第四版 前两章学习心得

    博客开篇 从大学入学开始,心里就萌生了写博客的想法,奈何自己太懒惰,一直没有付诸于行动.工作后,最近上班还算清闲,故又萌生出了写博客的想法.千里之行,始于足下.谨以此篇博客作为自己的博客开端,文中不足 ...

  7. 《汇编语言》王爽(第四版) 第十章 实验10

    文章目录 前言 一.子程序1 显示字符串 1.实验任务 2.分析 (1)如何在指定位置显示 (2)如何显示指定颜色 (3)保存子程序中用到的寄存器 3.代码 二.子程序2 解决除法溢出的问题 1.实验 ...

  8. 《汇编语言》王爽(第四版) 第十二章 实验12

    文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...

  9. 《汇编语言》王爽(第四版) 第十六章 实验16

    文章目录 前言 一.实验任务 二.思路分析 1.程序框架 2.设置前景色 3.设置背景色 三.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十六章 ...

  10. 《汇编语言》王爽(第四版)第八章 实验7

    文章目录 前言 一.题目 二.分析 1.内存分配情况 2.数据结构分析 3.实现思路 (1)设置段寄存器 (2)复制"年份"数据 (3)复制"年总收入"数据 ( ...

最新文章

  1. 解决小米手机缩放窗口问题
  2. UNREFERENCED_PARAMETER的作用 (unreferenced formal parameter 警告)
  3. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
  4. 最懒惰的算法—KNN
  5. leetcode|第三大的数java题解
  6. 后端接口重定向_接口自动化面试题,建议收藏!
  7. win10 iis网站服务器,windows10如何搭建IIS服务器
  8. loadrunner自学笔记-性能测试的注意要点
  9. 如何查看Oracle数据库字符集 尚未研究
  10. 利用ASP.NET MVC源代码调试你的应用程序
  11. 公司有加密需求,需要试用天锐绿盾,该如何操作?
  12. 【OpenCV】用sobel算子和Susan算子提取恩智浦智能车赛道边缘
  13. vue设置右边距_数控CNC雕刻机使用系列之二: 维宏软件的参数设置
  14. 恶意抢注商标的认定标准是什么?商标被抢注怎么解决?
  15. Linux 服务器配置 ASF 云挂卡
  16. 英语学习APP案例分析
  17. Matlab 可视化世界地图,matlab绘制世界地图的脚本
  18. 香港和内地重疾险25种常见重疾定义对比全解析
  19. m1MacBook Pro pycharm打字卡顿问题解决
  20. Gurobi运筹学开发教程02:基于系数矩阵和右侧项的python+gurobi建模

热门文章

  1. 打印准考证服务器异常显示,2020准考证打印30个常见问题汇总及解决办法
  2. csdn 博客代码块显示复制按钮
  3. 面向初学者的 Android 应用开发基础知识
  4. 数据库课程设计——学生选课管理系统
  5. C语言入门练习题-题目+答案
  6. 主键和外键举例_mysql 基础篇之主键和外键
  7. 华为服务器欧拉系统怎么改ip,EulerOS系统配置
  8. as ssd测试软件得分分析,SSD性能评判:教你读懂利用AS SSD BenchMark测试SSD固态硬盘性能的参数-网络教程与技术 -亦是美网络...
  9. 私生子与假婊子——谈中国手机JAVA游戏
  10. Centos 7/linux 安装gcc 教程