实验九

本文详细讲解了如何使用汇编语言在屏幕上输出内存中的十进制数,包括单个数字和多个数字的输出,并展示了如何在屏幕上显示字符串和设置字符属性,适用于初学者学习汇编语言的基础输出操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数 。

程序及实验截图如下:

编译,链接,运行后

代码没出错,很难受,不知道哪里有错,决定换个软件做

 

得到12

第一段的db中只含有一个数字12,所以其只占即ds:[0]的位置,而我们需要的是将商保存后面字节的位置

2. 补全程序t2.asm,完成在屏幕上输出data段定义的5个十进制两位数,数据和数据 之间以空格间隔。 

assume cs:code, ds:data
data segment
db 12,35,96,55,67
data ends
code segment
start:
mov ax,data        ; 补全程序,参考t1.asm,综合应用以下知识完成:
mov ds,ax      ; (1) loop指令、内存单元地址的灵活表示
mov cx,5        ; (2) div指令, 数字→数字字符的转换
mov si,0         ;(3) int 21h的2号子功能,完成单个字符输出的方法,即: 
s: mov ah,0
mov al,ds:[si]; mov ah,2
mov bl,10       ; mov dl,待输出字符或其ASCⅡ码
div bl
mov bl,al; int 21h
mov bh,ah      ;(4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符
mov ah,2
mov dl,bl
add dl,30h
int 21h

mov ah,2
mov dl,bh
add dl,30h
int 21h

mov ah,2
mov dl,32
int 21h

inc si
loop s

mov ax,4c00h
int 21h
code ends
end start

循环5次,除数是10,每除一次,把商、余数、空格分别输出。

3. 教材实验9(P187)

; p187 实验9

assume ds:data, cs:code
data segment
db 'welcome to masm!' ;共16个字符
db 2H,24H,71H ;字符串属性值
data ends

code segment
start: mov ax,data
mov ds,ax ;字符串及属性值所在段的段地址送入ds

mov ax,0b800H ;显示区缓存地址开始位置,想要打印到屏幕,就需要这个地址
mov es,ax ;80×25彩色字符模式显示缓冲区段地址送入es

; 添加代码,通过循环逐个将每个字符及其属性送入相应的显示缓冲区对应行
; 即:将data段的字符及属性通过循环逐个mov到显示缓冲区(es)段相应的单元内

; 可以先尝试分别写三段代码,每次完成一行的显示
; 程序运行起来后,再尝试通过灵活的寻址方式和循环,对三段代码修改和简化
; 学习第10章子程序后,还可以进一步完善优化,设计子程序,将行号、列号、颜色属性设置成入口参数

mov bx,0
mov si,0
mov cx,16

s0: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,2 ;存放颜色属性值绿色
mov es:[bx+721h][si],al
inc bx
inc si
loop s0

mov bx,0
mov cx,16
mov si,160

s1: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,36 ;绿底红色
mov es:[bx+721h][si],al
inc bx
inc si
loop s1

 

mov bx,0
mov cx,16
mov si,320

s2: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,113 ;白底蓝色
mov es:[bx+721h][si],al
inc bx
inc si
loop s2

mov ax,4c00h
int 21h
code ends
end start

 

 

 

 循环三次输出

 

转载于:https://www.cnblogs.com/TheaQ/p/10121815.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值