[os] 打印字符串

 

第一个例子原理很简单,但若没有一定的汇编实践经验,还是很容易在各种各样的细节上栽跟头的。

下面是我完成任务后的一些总结:

 

1. 我学习汇编的教材是基于dos的, 里面既介绍了bios中断,又介绍了dos中断,我没有注意两者的区别,直接调用了一个dos中断,结果搞了半天愣是没有结果。

所以使用中断时要注意区分两者, linux下不支持dos。

 

2. 写显存和调用int 10h(bios中断) 可以达到一样的效果。

 

3. 如果有一个字符串需要打印, 例如: PrintMsg: db "hello world";

此时若用ds:si 指向该字符串首地址,ds=PrintMsg, di=0 无法正确读取字符串。

可以让ds=cs, si=PrintMsg。 具体原因我现在也说不太清楚。

 

具体代码如下: 

hello.asm(需要了解一下bios 10h中断): 

----------------------------------------------------

org 07c00h

mov ax, cs

mov es, ax

 

mov bx, 000ch     ; char attribute

mov cx, 13        ; the string length

mov dh, 1         

mov dl, 1         ; row and column

 

mov bp, ScreenMsg ; the adress of string

 

mov ax, 1301h     ; show the string

int 10h

 

jmp $

ScreenMsg: db  "hello wupeng!"

times 510-($-$$) db 0

dw 0xaa55

-----------------------------------------------------

 

 

boot.sh:

-----------------------------------------------------

#!/bin/bash

nasm hello.asm -o hello.bin

dd if=hello.bin of=a.img bs=512 count=1 conv=notrunc

-----------------------------------------------------

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值