0167-入栈和出栈

环境

  • Time 2022-11-09
  • WSL-Ubuntu 22.04
  • QEMU 6.2.0
  • NASM 2.15.05

前言

说明

参考:《x86汇编语言:从实模式到保护模式》李忠

目标

通过设置 SS 栈段,和 push,pop 指令,反序输出 hello world。

BIOS 中断

栈是一种可以支持后进先出的数据结构,通过这种结构可以将字符串反序输出。

汇编代码

jmp start

data: db 'hello world'

start:
    mov cx,start - data
    mov dx,cx
    mov bx,0x7c00 + data
    mov ax,0x7c00
    mov ss,ax

pushc:
    mov al,[bx]
    xor ah,ah
    push ax
    inc bx
    loop pushc

    mov cx,dx
printc:
    pop ax
    mov ah, 0eh
    int 10h
    inc bx
    loop printc
    jmp $

    times 510 - $ + $$ db 0
    db 0x55
    db 0xaa

栈段设置

将栈段设置在了 0X7C00 处,刚好是启动代码的入口点,不过栈是向下增长的,所以并不会覆盖代码段。

入栈

通过 push 操作,将字符一个一个的送入栈中。

出栈

通过 pop 操作,将之前压入栈中的数据反向弹出,并输出。

倒序显示hello

总结

通过使用栈,向屏幕倒序输出了 hello world。

附录

posted @   jiangbo4444  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-07-12 【JavaScript】函数—可重用的代码块
2020-07-12 【JavaScript】循环语句
点击右上角即可分享
微信分享提示