《汇编语言程序设计(第5版)》 第三、四章小习题 DOSBox 5.x版本

相关概念

DOSBox
是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台。目前,DOSBox 已经支持在 Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系统中运行。
是一个软件。它是当前在 Windows 系统运行 DOS 游戏的较为完美的解决方案,该软件不仅能支持相当多的游戏实现正常运行,而且能将声音完美表现出来。
MASM
是Microsoft Macro Assembler 的缩写,是微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发。
它支持的宏很灵巧,既广泛又多样性,结构化程序的惯用语法,包含高级架构式的循环、程序调用,以及轮替 (alternation)(因此,MASM 算是高级汇编器的一个范本)。
.asm
ASM是汇编语言源程序的扩展名。
打开asm文件有两种方法 1、笔记本 2、MASMEdit软件(用于编译运行)
Debug
是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。
它的功能包括以下几个方面。
⒈ 直接输入,更改,跟踪,运行汇编语言源程序;
⒉ 观察操作系统的内容;
3.查看ROM BIOS的内容;
⒋观察更改RAM内部的设置值;
⒌以扇区或文件的方式读写软盘数据。

汇编语言一点点

汇编语言成型需要三个过程(假设文件名为 A):
1.masm A.asm ——> 生成 A.obj
此时你可以看到文件夹里面多出了个文件 A.obj
2.link A.obj ——> 生成 A.exe
这个时候这个程序才可以运行了,文件夹里面多出了个 A.exe
3.debug行为不是必须的,debug的目的是检查源文件里面程序是否有错误而执行的。

在这里插入图片描述

本篇博客记录了四个汇编上机实验的小例子?
习题来源于钱晓捷主编的《汇编语言程序设计》

prepare

将MASM文件存入C盘(推荐F盘),记得查看属性。
在这里插入图片描述
打开DOSBox.exe,进入DOS环境,新建一个名为 1.asm 的文件,弹出小蓝框!第一道练习题就码到这个文件中喽!
注: 在DOSBox中,释放鼠标的快捷键为 control + alt + delete → 点击 “任务管理器” / “取消”

mount c c:\users\windows
c:
cd masm
edit 1.asm

在这里插入图片描述

Q1

3.24 编制程序,完成 12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H 和 34H 等10字节数据之和,并将结果存入字节变量SUM中(不考虑溢出)。
(在网上查找的时候,也看到类似操作,但很多指令适用于 6.x 及以上版本,在这里加以说明,本文中四个实例都是在 5.x 版本下操作的)
在这里插入图片描述在这里插入图片描述
快捷键:control + alt + F
点击 “File” → “Save” → “File” → “Exit” 回到黑框
注: 最好边写边存
在这里插入图片描述
输入 masm 1.asm 回车后 → link 1.obj
在这里插入图片描述
再用debug命令进行调试,查看输出结果
输入 debug 1.exe → t → t …
在这里插入图片描述

Q2

4.4 编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。

datas       segment
datas       ends
stacks      segment
stacks      ends
codes       segment
            assume cs:codes,ds:datas,ss:stacks
start:      mov ax,datas
            mov ds,ax
next:       mov ah,01
            int 21H
            cmp al,'A'
            jb stop
            cmp al,'z'
            ja stop
            add al,20H
            mov dl,al
            mov ah,02
            int 21H
stop:       jmp next
            mov ah,4ch
            int 21H
codes       ends
            end start

在这里插入图片描述

masm 2.asm
link 2.obj
debug 2.exe

在这里插入图片描述在这里插入图片描述

Q3

4.5 已知用于LED数码管显示的代码表为:

LEDTABLE
DB 0C0H, OF9H, 0A4H, 0BOH, 99H, 92H, 82H, 0F8H
DB 80H, 90H, 88H, 83H, 0C6H, 0C1H, 86H, 8EH

stack     segment stack 
          db 100h dup(?) 
stack     ends 
data      segment 
ledtable  db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h 
          db 80h,90h,88h,83h,0c6h,0c1h,86h,8eh 
lednum    db 3 
data      ends 
code      segment 'code' 
assume    cs:code,ss:stack,ds:data 
start:    mov ax,data 
          mov ds,ax 
          lea bx,ledtable 
          mov al,lednum 
          xlat 
          mov ax,4c00h 
          int 21h 
code      ends 
          end start

在这里插入图片描述

masm 3.asm
link 3.obj
debug 3.exe

在这里插入图片描述在这里插入图片描述

Q4

4.15 编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过,则显示“overflow”

data         segment
count        equ 100
parray       dw count dup(?)
wordsum      dw ?
error        db 'overflow', '$'
data         ends
code         segment
             assume cs:code,ds:data
start:       mov bx,offset parray
             mov cx,count
             xor ax,ax
again:       add ax,[bx]
             jc next
             inc bx
             loop again
             mov [bx],ax
             jmp next
next:        mov dx,offset error
             mov ah,9
             int 21h
code         ends
             end start

在这里插入图片描述

masm 4.asm
link 4.obj
debug 4.exe

在这里插入图片描述在这里插入图片描述
END ?

  • 4
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值