- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第一行是打印垃圾。
我试图切换偏移量、索引等。但是无论字符串是什么,第一行总是错误的。
mov AX, 0b800h
mov ES, AX
nums db ' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 '
numsend label byte
;first row
MOV SI,OFFSET nums
MOV DI,160*4 +2 ;1st row,1st column, 2 cells per char
MOV AH, 07h
MOV CX,5*3;2 chars per digit, and 5 digit
row1:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row1
;second row
MOV SI,OFFSET nums+15 ;point to the beginning of '_6 _7 _8 _9 10' from nums array
MOV DI,160*5 +2 ;2nd row,1st column, 2 cells per char
MOV AH, 07h
MOV CX,5*3 ;2 chars per digit, and 4 digit
row2:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row2
;third row
MOV SI,OFFSET nums+30 ;point to the beginning of '11 12 13 14 15' from nums array
MOV DI,160*6 + 2*1 ;3rd row,1stcolumn,2 cells per char
MOV AH, 07h
MOV CX,5*3 ;2 chars per digit, and 4 digit
row3:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row3
;fourth row
MOV SI,OFFSET nums+45 ;point to the beginning of ' 16 17 18 19 ' from nums array
MOV DI,160*7 + 2*1 ;4th row,1stcolumn,2 cells per char
MOV AH, 07h
MOV CX,5*3 ;2 chars per digit, and 4 digit
row4:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row4
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19
6 7 8 9 10
11 12 13 14 15
16 17 18 19
最佳答案
问题是您将数据作为代码执行:
在计算机中,您的程序将存储在 RAM 中。代码和数据都是如此。 RAM 只存储 0 到 255 范围内的数字。CPU 无法区分代码和数据。
资料db ' 1 2 3 4 ...
存储为 0x20 0x20 ...
和指令and [bx+si],ah
也存储为 0x20 0x20 ...
.
因为没有jmp
mov ES, AX
之后的说明,CPU 假定 mov es,ax
之后的字节表示要执行的指令( 0x20 0x20
= and [bx+si],ah
)而不是数据。
在这种情况下,CPU 执行的指令很可能会使程序崩溃。在您的情况下,这似乎不会发生。
但是,在您的情况下,数据的最后一个字节是 0x20
.这不是完整的 x86 指令,后面跟着指令 mov si,offset nums
存储为 0xbe xx xx
. CPU 会将其解释为 0x20 0xbe xx xx
这是 and [bp+nums],bh
.
因此si
寄存器不会被设置。
使用 NASM 将文件的第一部分(在移植语法之后)组装成平面二进制文件并使用 ndisasm
反汇编,我们得到:
address hexdump disassembly
00000000 B800B8 mov ax,0xb800
00000003 8EC0 mov es,ax
00000005 2020 and [bx+si],ah ; two ASCII spaces = 0x2020
00000007 3120 xor [bx+si],sp
00000009 2032 and [bp+si],dh
0000000B 2020 and [bx+si],ah
0000000D 3320 xor sp,[bx+si]
0000000F 2034 and [si],dh
00000011 2020 and [bx+si],ah
00000013 352020 xor ax,0x2020
00000016 362020 and [ss:bx+si],ah
00000019 37 aaa
0000001A 2020 and [bx+si],ah
0000001C 3820 cmp [bx+si],ah
0000001E 2039 and [bx+di],bh
00000020 2031 and [bx+di],dh
00000022 3020 xor [bx+si],ah
00000024 3131 xor [bx+di],si
00000026 2031 and [bx+di],dh
00000028 3220 xor ah,[bx+si]
0000002A 3133 xor [bp+di],si
0000002C 2031 and [bx+di],dh
0000002E 3420 xor al,0x20
00000030 3135 xor [di],si
00000032 2031 and [bx+di],dh
00000034 362031 and [ss:bx+di],dh
00000037 37 aaa
00000038 2031 and [bx+di],dh
0000003A 3820 cmp [bx+si],ah
0000003C 3139 xor [bx+di],di
0000003E 2020 and [bx+si],ah
00000040 20BE0500 and [bp+0x5],bh ; 0x20 is the last space,
; BE imm16 is the mov-to-SI
00000044 BF8202 mov di,0x282 ; decoding happens to line up with this instruction
00000047 B407 mov ah,0x7
00000049 B90F00 mov cx,0xf
BX
,
SI
,
DI
,
BP
,以及它们的各种组合,并没有指出任何破坏问题的地方。
关于assembly - 第一行是打印垃圾。无法识别错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625604/
我想要以下代码的 Python 单行解决方案,但是怎么做呢? total = 0 for ob in self.oblist: total += sum(v.amount for v in o
今天和大家一起学习一种可视化技术:构建树状热力图treemap。树形图易于可视化,且易于被人理解。树状图通过展示不同大小的矩形,以传达不同大小的数据量,一般认为,较大的矩形意味着占总体的一大部分,而较
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个声明 $set eq "Y" ? $set = "N" : $set = "Y"; 但不管它总是设置为 "N" # Toggle setting if ($set eq "Y") { $
当我尝试在我的服务器上上传一个 php 文件时,我收到一条消息:"Parse error: ..." 我知道这是什么意思,但问题是别的。 如果我在本地服务器上编辑文件(我的计算机上安装了 XAMPP)
我是 python oneliner 循环的新手。 我希望用户将数据输入到二维列表中,同时提醒他他们将输入的数据索引。我的代码是: flag=0 x=[[int(input("enter the "+
尝试在变量之前和之后打印字符串。C 是否有能力使用一条语句来显示此输出? 这有效: float value = 5; printf("\nThe value of %f", value); print
我正在验证我创建的 MySQL 数据库的结果,为此,我需要一些屏幕截图。 例如,以下查询: select distinct run_ID from ngsRunStats_FK.failedRuns
有人可以解释一下这个 JS LINE 吗?数据是一个对象。 var list = data == null ? [] : (data.wine instanceof Array ? data.wine
如何在一行中添加三个下拉菜单。我想把我的日、月和年放在一行中,但不能这样做。任何帮助将不胜感激。我附上我的 jsfiddle . .... 最佳
我正在尝试使用 html 将 iframe 的高度设置为 100%(我已成功完成),但我还在顶部添加了一行额外的文本,所以它太高了 ~16px(这需要一个滚动条)。有没有办法更改 iframe 以显示
这是一个示例,我从文件中读取行作为字符串,以使整个文件作为字符串数组: String[] ArrayOfStrings = (new Scanner( new File("log.txt") ).us
我有一个包含大量定义的配置文件,用于在编译期间包含模块。此外,这意味着我必须经常检查代码内部的定义。每张支票需要 3 行,是否可以在一行中执行此操作。 #if FUNC_ENABLED functio
我正在尝试制作一个水平列表,其中每个 列表中的 s 的高度为 385px,宽度为 400px。 我尝试使用 inline-block 使列表水平排列,但这似乎不起作用。也就是说,我的意思是列表仍然是垂
这很烦人,我有一个带有 css 文件的 wordpress 主题,所有内容都在一长行中。我想知道为什么有人会那样做。现在我已经升级了,我需要将旧文件与新文件进行比较,以便我可以接受更改。 Meld、d
我有一个对象数组,其中每个对象都有一个 search_order 属性。我要检查数组并将所有对象的属性增加 1这是简单的方法: res = [] for r in array: r.searc
我在某些服务器上遇到许多具有相同内容和相同名称的文件。我需要隔离这些文件进行分析,所以我不能只删除重复项。操作系统为Linux(centos和ubuntu)。 我枚举文件名和位置并将它们放入文本文件中
你能在不抛出错误的情况下解决这个问题吗?答案是单线。这是来自一个死的职位发布,在回复中要求回答。我认为这是剔除受访者的聪明方法,但我似乎无法在不出错的情况下回答它。 显而易见的解决方案: f.moo(
这个问题在这里已经有了答案: Is it ok if I omit curly braces in Java? [closed] (16 个答案) 关闭 9 年前。 我在 java 中使用没有大括号
我在这里试图用 python 制作一个简单的计算器,我想知道是否可以在命令运行时将前 3 行合并为一行。我的意思是;我不必按 Enter 键来键入下一个数字/运算符,而是按空格键(在输入部分)。 wh
我是一名优秀的程序员,十分优秀!