Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 操作系统不转到下一节_Assembly_Nasm_X86 16_Bootloader - Fatal编程技术网

Assembly 操作系统不转到下一节

Assembly 操作系统不转到下一节,assembly,nasm,x86-16,bootloader,Assembly,Nasm,X86 16,Bootloader,在修复了使用NASM编译时的任何错误后,程序现在完成第一部分,但当它到达第二部分时,它什么也不做。我试图结合两个指南来创建一个。 第二节开始时说;计算器代码从这里开始 我不熟悉这种汇编语言,所以不知道如何修复它。如果你能帮忙,我将不胜感激。如果您能将代码写在您的答案中,让我更轻松,我们也将不胜感激:) [位16];告诉汇编程序在实模式(16位模式)下工作 [org 0x7c00];从BIOS将加载我们的0x7C00内存位置组织 开始:;从代码开始的位置开始标签 异或ax,ax;将ax寄存器设置为

在修复了使用NASM编译时的任何错误后,程序现在完成第一部分,但当它到达第二部分时,它什么也不做。我试图结合两个指南来创建一个。 第二节开始时说;计算器代码从这里开始

我不熟悉这种汇编语言,所以不知道如何修复它。如果你能帮忙,我将不胜感激。如果您能将代码写在您的答案中,让我更轻松,我们也将不胜感激:)

[位16];告诉汇编程序在实模式(16位模式)下工作
[org 0x7c00];从BIOS将加载我们的0x7C00内存位置组织
开始:;从代码开始的位置开始标签
异或ax,ax;将ax寄存器设置为0
mov-ds,ax;将数据段(ds)设置为0
mov-es,ax;将额外段设置为0
mov bx,0x8000
mov-ax,0x13;清除屏幕
int 0x10;调用bios视频中断
mov-ah,02;用大字体清除屏幕
int 0x10;中断显示
;将光标设置到屏幕上的特定位置
mov-ah,0x02;设置更改光标位置的值
mov bh,0x00;页
mov-dh,0x06;堇酸钇/世界其他地区
mov-dl,0x09;x-堇酸盐/柱
int 0x10
mov si,开始介绍;指向源索引的点开始\u os\u介绍字符串
调用"打印"DiffColor"字符串;调用打印不同颜色字符串函数
;将光标设置到屏幕上的特定位置
mov-ah,0x02
mov bh,0x00
mov-dh,0x10
mov-dl,0x06
int 0x10
mov si,按_键;指向源索引的按键字符串
调用"打印"绿色"字符串;调用打印绿色字符串函数
mov-ax,0x00;获取键盘输入
int 0x16;保持和读取输入中断
;/////////////////////////////////////////////////////////////
; 将第二个扇区加载到内存中
mov-ah,0x02;将第二级加载到内存
mov al,1;要读入内存的扇区数
mov-dl,0x80;从固定/usb磁盘读取扇区
mov-ch,0;气缸号
mov-dh,0;总人数
mov-cl,2;扇区号
mov bx,第2阶段;加载到es:bx段:缓冲区偏移量
int 0x13;磁盘I/O中断
jmp第2阶段;跳到第二阶段
;/////////////////////////////////////////////////////////////
; 在这里声明字符串数据
启动\u os\u简介数据库“欢迎使用我的操作系统!”,0

按_keydb'>>>>>按任意键由“计算器代码从这里开始”指示的代码永远不会加载到内存中。您错误地使用了错误的函数号

; load third sector into memory
mov ah, 0x03                    ; load third stage to memory
加载的BIOS函数号是02h,而不是您所写的0x03


即使上述问题得到纠正,随后的代码也会重新加载第二和第三个扇区(总共16个),并跳转到它们。这将导致无休止的循环


“CALCULATOR code STARTS HERE”(计算器代码从这里开始)所指示的代码永远不会加载到内存中。您错误地使用了错误的函数号

; load third sector into memory
mov ah, 0x03                    ; load third stage to memory
加载的BIOS函数号是02h,而不是您所写的0x03


即使上述问题得到纠正,随后的代码也会重新加载第二和第三个扇区(总共16个),并跳转到它们。这将导致无休止的循环


我不认为有多少人会想通过阅读1400行代码来找出你的问题。你能创造一个,强调“最小”吗?您是否尝试过使用调试器(例如,在虚拟机中)单步执行有问题的代码?我不认为有多少人会希望阅读1400行代码来查找您的问题。你能创造一个,强调“最小”吗?您是否尝试过使用调试器(例如,在虚拟机中)单步执行程序来处理有问题的代码?
mov ah, 0x02
mov al, 0x10
mov dl, 0x80
mov ch, 0              ;
mov dh, 0              ;
mov cl, 2              ; SAME AS BEFORE !!!!!!!!
mov bx, _start
int 0x13
cli
jmp _start