当前位置:网站首页>Résolution de l'instance d'assemblage - - affichage à l'écran en mode réel
Résolution de l'instance d'assemblage - - affichage à l'écran en mode réel
2022-07-03 16:50:00 【Raindayinrain】
1.Comment1
; Mise en marche,Exécution en premierBIOS,Exécuter à nouveau le programme de démarrage principal du disque dur,C'est ici..
; C'est le mode réel.,16Mode bit,L'emplacement physique du Bootstrapper principal est maintenant0x7c00
; Zone mémoire physique:0xb8000~0xbFFFFEst la zone de mémoire.
; Mode mémoire80*25.Chaque caractère occupe2Octets,L'un est un caractèreasciiCode,L'un est le format d'affichage.
mov ax,0xb800
mov es,ax
; esPeut être utilisé pour les registres de segments auxiliaires d'adressage de mémoire physique de données,Par défautds
mov byte [es:0x00],'L'
mov byte [es:0x01],0x07
mov byte [es:0x02],'a'
mov byte [es:0x03],0x07
mov byte [es:0x04],'b'
mov byte [es:0x05],0x07
mov byte [es:0x06],'e'
mov byte [es:0x07],0x07
mov byte [es:0x08],'l'
mov byte [es:0x09],0x07
mov byte [es:0x0a],' '
mov byte [es:0x0b],0x07
mov byte [es:0x0c],"o"
mov byte [es:0x0d],0x07
mov byte [es:0x0e],'f'
mov byte [es:0x0f],0x07
mov byte [es:0x10],'f'
mov byte [es:0x11],0x07
mov byte [es:0x12],'s'
mov byte [es:0x13],0x07
mov byte [es:0x14],'e'
mov byte [es:0x15],0x07
mov byte [es:0x16],'t'
mov byte [es:0x17],0x07
mov byte [es:0x18],':'
mov byte [es:0x19],0x07
; Lors de l'entrée dans le Bootstrapper principal ,csLe contenu est le suivant:0x0000
mov cx,cs
mov ds,cx
mov ax,number
mov bx,10
mov dx,0
; dx:ax / bx, Commercial Fair ax, Mets le reste dx
div bx
mov [0x7c00+number+0x00],dl ; Reste de stockage, C'est un peu
xor dx,dx ; dxSera réglé à0
div bx
mov [0x7c00+number+0x01],dl ; Reste de stockage, Voici les dix
xor dx,dx
div bx
mov [0x7c00+number+0x02],dl ; Reste de stockage, C'est une centaine
xor dx,dx
div bx
mov [0x7c00+number+0x03],dl ; Reste de stockage, C'est mille
xor dx,dx
div bx
mov [0x7c00+number+0x04],dl ; Reste de stockage, Voici dix mille
mov al,[0x7c00+number+0x04]
add al,0x30 ; Ceci convertit une valeur décimale de 10 000 bits en asciiCode
mov [es:0x1a],al ; Continuer à écrire 10 000 bits à la mémoire d'affichage ascii
mov byte [es:0x1b],0x04
mov al,[0x7c00+number+0x03]
add al,0x30
mov [es:0x1c],al
mov byte [es:0x1d],0x04
mov al,[0x7c00+number+0x02]
add al,0x30
mov [es:0x1e],al
mov byte [es:0x1f],0x04
mov al,[0x7c00+number+0x01]
add al,0x30
mov [es:0x20],al
mov byte [es:0x21],0x04
mov al,[0x7c00+number+0x00]
add al,0x30
mov [es:0x22],al
mov byte [es:0x23],0x04
mov byte [es:0x24],'D'
mov byte [es:0x25],0x07
; Contrôle l'affichage pour afficher un segment de contenu , Et puis il a montré number, Et puis il a montré D.
infi: jmp near infi
; Langues d'assemblage supportant les étiquettes , L'étiquette est une valeur numérique . Décalage reflétant la position indiquée .
; Ici.numberÇa reflètedbDéclaration5- Oui.1 Distance entre la position de départ des données octets et la position de départ du programme
number db 0,0,0,0,0
; Appui à la compilation timesPréfixe, Utilisé pour indiquer combien de fois les instructions suivantes sont exécutées .
; Déclaration203- Oui.1Octets de données, Occupe une position continue 203Espace de stockage.
times 203 db 0
; Bootstrapper principal512Octets, Les deux derniers octets doivent être 0x55 0xaa
db 0x55,0xaa 2.Comment2
jmp near start
mytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,\
'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07
number db 0,0,0,0,0
start:
mov ax,0x7c0
mov ds,ax
mov ax,0xb800
mov es,ax
cld
mov si,mytext
mov di,0
mov cx,(number-mytext)/2
; Oui.ds:siDivision,cxUn mot, Vers l'avant es:diDivision
rep movsw
mov ax,number
mov bx,ax
mov cx,5
mov si,10
digit:
xor dx,dx ; dxSet to0
div si ; dx:ax / si,Quotientax,Restedx
mov [bx],dl ; Stocker les bits dans number Premier emplacement de mémoire marqué
inc bx
loop digit ; Exécution du cycledigit, Compte tenu de l'exécution initiale ,Application conjointecxUne fois
mov bx,number
mov si,4
show:
mov al,[bx+si] ; number Emplacement du marquage 4Début des octets[De0Nombre]
add al,0x30 ; Convertir en octets asciiCode
mov ah,0x04 ; Afficher les propriétés
mov [es:di],ax ; Stocké dans la mémoire d'affichage immédiatement après la chaîne d'étiquettes précédente
add di,2
dec si
jns show ; Cycle,Jusqu'àdec si Le résultat est négatif , Arrêter le cycle pour continuer .
mov word [es:di],0x0744
jmp near $
times 510-($-$$) db 0 ; $ Représente le décalage entre la position actuelle et la position de départ .
db 0x55,0xaa 3. Somme par pile
jmp near start ; Saut
message db '1+2+3+...+100='
start:
mov ax,0x7c0
mov ds,ax
mov ax,0xb800
mov es,ax
mov si,message
mov di,0
mov cx,start-message
@g:
mov al,[si] ; De la mémoire physique au Registre
mov [es:di],al ; Du registre à la mémoire physique , Parce que la mémoire physique directe n'est pas prise en charge 1à la mémoire physique2
inc di
mov byte [es:di],0x07
inc di
inc si ; di Pointer vers l'emplacement de la mémoire 2 Octets pour afficher un siOctets à
loop @g ; AdoptioncxNombre de contrôles
xor ax,ax ; axZéro.
mov cx,1 ;
@f:
add ax,cx
inc cx
cmp cx,100
jle @f ; Continuer la boucle tant que le résultat de la comparaison est inférieur ou égal à
xor cx,cx
mov ss,cx
mov sp,cx
mov bx,10
xor cx,cx
@d:
inc cx
xor dx,dx
div bx ; dx:ax / bx,Quotientax,Restedx
or dl,0x30 ; Réalisationdl+0x30Même effet
push dx ; Utiliser la pile pour stocker les résultats de calcul --Bits,Dix.,...
cmp ax,0
jne @d ; Les résultats de la comparaison ne sont pas égaux ,Continuez le cycle
@a:
pop dx
mov [es:di],dl ; Va sortir de la pile ascii Les caractères sont copiés dans la mémoire d'affichage immédiatement après la Section d'affichage précédente
inc di
mov byte [es:di],0x07
inc di
loop @a ; Adoptioncx Pour contrôler le nombre de cycles ,À chaque arrivéeloopIci.,cxSoustraire d'abord1,Si à ce stadecxPour0, La boucle ne peut pas continuer .Sinon,Continuez le cycle.
jmp near $
times 510-($-$$) db 0
db 0x55,0xaa边栏推荐
- What is the pledge pool and how to pledge?
- 数据分析必备的能力
- Web crawler knowledge day03
- Custom plug-in construction and use of QT plug-in
- [combinatorial mathematics] counting model, common combinatorial numbers and combinatorial identities**
- Pointcut expression
- How to allow remote connection to MySQL server on Linux system?
- [combinatorics] polynomial theorem (polynomial coefficients | full arrangement of multiple sets | number of schemes corresponding to the ball sub model | polynomial coefficient correlation identity)
- [combinatorics] non descending path problem (number of non descending paths with constraints)
- Processing strategy of message queue message loss and repeated message sending
猜你喜欢

线程池执行定时任务

CC2530 common registers for port interrupts

2022 love analysis · panoramic report of digital manufacturers of state-owned enterprises

Aike AI frontier promotion (7.3)

网络安全web渗透技术

Thread pool executes scheduled tasks

什么是质押池,如何进行质押呢?

CC2530 common registers for serial communication

What is the pledge pool and how to pledge?

一台服务器最大并发 tcp 连接数多少?65535?
随机推荐
CC2530 common registers for crystal oscillator settings
Extraction of the same pointcut
[2. Basics of Delphi grammar] 2 Object Pascal data type
CC2530 common registers for serial communication
AcWing 第58 场周赛
【剑指 Offer】58 - I. 翻转单词顺序
浅谈拉格朗日插值及其应用
PHP converts a one-dimensional array into a two-dimensional array
How to delete a specific line from a text file using the SED command?
2022.02.14_ Daily question leetcode five hundred and forty
【剑指 Offer 】57 - II. 和为s的连续正数序列
Mysql 单表字段重复数据取最新一条sql语句
线程池执行定时任务
Is it safe to open a stock account by mobile registration? Does it need money to open an account
[mathematical logic] equivalent calculus and reasoning calculus of propositional logic (propositional logic | equivalent calculus | principal conjunctive (disjunctive) paradigm | reasoning calculus)**
什么是质押池,如何进行质押呢?
Develop team OKR in the way of "crowdfunding"
Caching mechanism of Hibernate / session level caching mechanism
[solved] access denied for user 'root' @ 'localhost' (using password: yes)
MySQL converts comma separated attribute field data from column to row