74码编码译码c语言程序,请问如下代码的JMP 0x7c50和0x7c74都是怎么算出来的?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

各位前辈好,

我是一个刚买了《30天自制操作系统》的汇编小白。这本书里最开始讲的是汇编的一些内容,我有点不太明白,烦请各位指点一下:

这是原书光盘的汇编代码:

===========================================================

; hello-os

; TAB=4

ORG 0x7c00

JMP entry

DB 0x90

DB "HELLOIPL"

DW 512

DB 1

DW 1

DB 2

DW 224

DW 2880

DB 0xf0

DW 9

DW 18

DW 2

DD 0

DD 2880

DB 0,0,0x29

DD 0xffffffff

DB "HELLO-OS "

DB "FAT12 "

RESB 18

; プログラム本体

entry:

MOV AX,0 ; レジスタ初期化

MOV SS,AX

MOV SP,0x7c00

MOV DS,AX

MOV ES,AX

MOV SI,msg

putloop:

MOV AL,[SI]

ADD SI,1 ; SIに1を足す

CMP AL,0

JE fin

MOV AH,0x0e ; 一文字表示ファンクション

MOV BX,15 ; カラーコード

INT 0x10 ; ビデオBIOS呼び出し

JMP putloop

fin:

HLT ; 何かあるまでCPUを停止させる

JMP fin ; 無限ループ

msg:

DB 0x0a, 0x0a ; 改行を2つ

DB "hello, world"

DB 0x0a ; 改行

DB 0

RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令

DB 0x55, 0xaa

; 以下はブートセクタ以外の部分の記述

DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00

RESB 4600

DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00

RESB 1469432

===========================================================

这一章是介绍汇编指令都是什么意思的。然后书中说 JMP entry其实可以写成 JMP 0x7c50……我这里就懵了……

不是因为不知道entry这个是什么,是不知道这0x7c50的地址是怎么得到的……如果说是直到entry标签处算出来的,那1+8+2+1+2+1+2+2+1+2+2+2+4+4+4+4+10+7+18 = 77 也就是 4D吧……那按说应该是0xc4d才对啊……

另外书中还说MOV SI, msg 相当于MOV SI, 0x7c74……这个数我也不知道怎么来的……

你们都有什么比较快的“计算心法”么?……

此外MOV AL, [SI]是指将 SI中保存的地址 传给 AL……那MOV AL, SI会怎样?这里我也不太明白……

烦请各位解惑一下……

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值