当前位置:网站首页>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边栏推荐
- 【剑指 Offer】58 - I. 翻转单词顺序
- How to set up SVN server on this machine
- One article takes you to understand machine learning
- MySQL converts comma separated attribute field data from column to row
- Pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs
- Fast Ethernet and Gigabit Ethernet: what's the difference?
- Mysql 将逗号隔开的属性字段数据由列转行
- [combinatorics] non descending path problem (number of non descending paths with constraints)
- PHP production website active push (website)
- There are several APIs of airtest and poco that are easy to use wrong in "super". See if you have encountered them
猜你喜欢

Netease UI automation test exploration: airtest+poco

Meituan side: why does thread crash not cause JVM crash

Simulink oscilloscope data is imported into Matlab and drawn

Visual SLAM algorithms: a survey from 2010 to 2016

CC2530 common registers for crystal oscillator settings

Arduino esp32: overall framework of lvgl project (I)

What kind of material is 14Cr1MoR? Analysis of chemical composition and mechanical properties of 14Cr1MoR

Zebras are recognized as dogs, and Stanford found the reason why AI made mistakes

Add color to the interface automation test framework and realize the enterprise wechat test report

Mysql database DDL and DML
随机推荐
【剑指 Offer】58 - I. 翻转单词顺序
What material is sa537cl2? Analysis of mechanical properties of American standard container plate
How programming apes grow rapidly
How to allow remote connection to MySQL server on Linux system?
[combinatorics] recursive equation (outline of recursive equation content | definition of recursive equation | example description of recursive equation | Fibonacci Series)
Fast Ethernet and Gigabit Ethernet: what's the difference?
PHP production website active push (website)
智慧之道(知行合一)
Deep understanding of grouping sets statements in SQL
Necessary ability of data analysis
执行脚本不认\r
8 cool visual charts to quickly write the visual analysis report that the boss likes to see
What material is 13crmo4-5 equivalent to in China? 13crmo4-5 chemical composition 13crmo4-5 mechanical properties
function overloading
CC2530 common registers for timer 1
Hands on in-depth learning notes (XIV) 3.7 Simple implementation of softmax regression
Mysql database -dql
Le zèbre a été identifié comme un chien, et la cause de l'erreur d'AI a été trouvée par Stanford
CC2530 common registers for port initialization
Pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs