Assembly 汇编语言工具和参考

不久前我曾经做过汇编语言编程,我太傻了,想重新开始 以前,我用MASM.EXE命令行编译asm代码,在基本文本编辑器中编写代码时不进行验证 目前在汇编中编写代码的最佳工具是什么 网上有哪些好的快速参考资料?我最喜欢的汇编程序是;它是多平台、最新的,并且具有有趣的功能(例如,一个简单而强大的宏引擎) 主要参考资料是英特尔和AMD的文档: 您可能也喜欢此备忘单:: Netwide汇编程序NASM是一种80x86和x86-64汇编程序,旨在实现可移植性和模块化。它支持一系列对象文件格式,包括Lin

Assembly 为什么在C++/CLI造成了可怕的问题?

我在C++/CLI中使用内联asm。事实上,可怕的问题可能是我发现的一个错误。 我将向量从一个函数调用传递到另一个函数调用。如果我在被调用函数中对_asm{…此处的某些汇编代码}的整个代码段进行注释,其中使用了从其他函数提供给它的向量,那么没有问题,整个向量都会很好,并以正确的方式成功地复制到被调用函数的参数中 但是如果unmment{u asm{},我的意思是如果我在调用的函数中使用{u asm{}patch,它会损坏对象的整个向量,实际上,整个对象会损坏,其中包含向量和其他字符串数据,它只会

Assembly 使用汇编打印十六进制数字

我正在努力学习NASM汇编,但我似乎在努力学习高级语言 我使用的所有教科书都讨论使用字符串——事实上,这似乎是他们最喜欢的东西之一。打印hello world,从大写改为小写,等等 然而,我试图理解如何在NASM汇编中递增和打印十六进制数字,但不知道如何继续。例如,如果我想用十六进制打印#1-n,那么如果不使用C库(我所有的参考文献都能使用C库),我该怎么做呢 我的主要想法是在.data部分有一个变量,我将继续增加它。但是如何从这个位置提取十六进制值呢?我似乎需要先把它转换成字符串 任何建议或示

Assembly 初学者手臂装配问题

如何将预定义的.byte的值正确加载到寄存器中?e、 g.常数定义为: constant: .byte 'a' 我正在努力: ldr r0, =constant ldr r1, [r0] 但是,模拟器在第二行之后停止,并给出错误“访问未对齐的内存位置,错误地址”。如果不包括第二行,其余代码将正常运行 完整代码: ; r0 is a pointer to msg1 ; r1 used to store the value of val ; r2 used to

Assembly 理解MIPS csum_部分

我试图理解vanilla内核2.6.35中arch/mips/lib/csum_partial.S中的csum_partial()函数代码。在输入长度小于8字节的情况下,它看起来有一个bug。我知道这听起来不合理,这就是我在这里问的原因 该函数如下所示开始 /* * a0: source address * a1: length of the area to checksum * a2: partial checksum */ #define src a0 #define sum v

Assembly 程序计数器?

如果我理解正确,程序计数器指向要执行的指令的地址,并且在大多数情况下,向程序计数器添加四个以前进到下一个指令地址。但是,假设您有一个程序计数器,它指向内存中的一个字(例如,字15),并且您希望前进到下一条指令,那么您是否打算将4直接添加到15以获得下一条指令??任何解释都将不胜感激,因为它被称为指令指针。一旦处理器对当前指令进行解码,它就会发现它占用了多少字节,并知道需要向当前指令指针值添加多少字节才能前进到下一条指令,以便在执行当前指令时,处理器知道下一步要做什么 例如,处理器以存储值15的指

Assembly mips类型R、I和J、RS、RT和RD字段长度

RS、RT和RD字段有5位的原因是什么?MIPS有32整数寄存器和32浮点寄存器,因此需要5位来表示每组32寄存器 寄存器字母d、t和s是(寄存器)编号或寄存器名称的占位符 请阅读更多相关内容,这确实是原因所在。能够容纳每个寄存器值的最小存储空间。RS=源寄存器,RD=目标寄存器。(RT实际上有几个目的)应该说每个寄存器编号不是值。打字错误

Assembly 无法编译fasm文件

我正在尝试编译asm xml。但我得到了以下错误: error: illegal instruction. 受影响的线路为: section '.asmdata' writeable 有人能帮我解决这件事吗 提前谢谢大家, 问候 F您编译了错误的文件。您应该编译与您的平台对应的程序集文件,elf.asm或win32.asm。asm-xml.asm本身并不是一个完整的汇编程序。这听起来像是与上下文相关的。请发布一个(小)完整的例子。感谢您的反馈。我还没来得及得到反馈,Jens就回答了。

Assembly 汇编:添加两个数字

我想添加两个数字num1B和num2B,并将数字存储在结果中,最后显示结果 但是,当我启动nasm时,它说: prog2_1.txt:4:警告:尝试初始化nobits节中的内存:已忽略 prog2_1.txt:5:警告:尝试初始化nobits节中的内存:已忽略 prog2_1.txt:6:警告:尝试初始化nobits节中的内存:已忽略 我的代码: org 0x0100 ; section .bss num1B: db 0Ah ; init num1B to 0Ah num2B:

Assembly 查找输入字符串的长度

这就是我目前得到的。我能做些什么来解决这个问题 .data msg1:.asciiz "Please insert text (max 20 characters): " msg2:.asciiz "\nThe length of the text is: " newline: .asciiz "\n" str1: .space 20 .text .globl main main: addi $v0, $v0,4 la $a0,msg1 syscall #print msg1 li $v0,

Assembly 装配中的编号错误

我有一个问题,因为long应该存储32位,eax也应该存储32位。但为什么它不能存储多达4百万?而不是4000000000它打印我-294967296所有的时间 有人想到了吗?听起来像是将其用作有符号32位整数类型,因此值的范围为[-2147483648,2147483647] 我已经很长一段时间没有进行任何汇编了,但是如果您将其作为无符号类型使用,您将得到[04294967295]的范围。您可能想尝试一个无符号长的。是否有办法在汇编中使用无符号?不太可能。由打印数字的人将其解释为有符号或无符号

Assembly MASM中的奇怪行为:“;十二月";指令导致减法2

我正在写一个程序来显示10秒的当前时间和日期。我被指示只能为此使用smallwin.inc。我编写了一个使用Irvine32.inc的程序,但是当我只切换到smallwin时,我需要编写一些输出数字的程序。当我添加这些时,一个非常奇怪的行为开始发生!我使用呼叫“dec repTime”,它将减少2而不是1!我尝试过“sub-repTime,1”,但它仍然如此!我甚至将repTime移到了eax,然后减去1,然后将eax移回repTime,它仍然减去2 我写的程序应该运行10秒。由于减法2的问题,

Assembly 如何从十六进制获取MIPS操作码

如何从像0x71014802这样的数字中计算最左边的6位 这6位告诉我们这段代码代表什么MIPS指令。 答案是0x1c,但这本书是如何计算的 例如: 0x10001A08 = 000011 00000 10000 01000 00000 000111 这个71014802是如何转换成二进制的?我如何做到这一点 第一个是十六进制数,很容易将其转换为二进制。每个十六进制数字都可以转换成4个二进制数字,如下例所示 Ex $$_7=2^2+2^1+2^0=0111_$$ 对于您的十六进制数0x710

Assembly 使用视频映射内存在x86程序集中的光标下写入

我正在编写一个简单的应用程序,尝试使用视频映射内存(从地址0B800开始)。在大多数情况下,我可以直接写入该内存,字符会立即出现在屏幕上,但我发现,如果我尝试直接在光标下写入,我尝试写入的内容不会被粘住。有办法解决这个问题吗?如何直接在光标下书写 当前正在使用类似的方式写入内存: mov word ptr ES:[DI], BX 其中BX有我想要写的属性和字符 我查找了dosbox支持的中断,int 33h在列表中。用ax=2调用int 33h隐藏鼠标,然后mov word ptr ES:[D

Assembly 汇编语言(IA-32 NASM)中的寻址模式

由于这方面的web资源很少,为了便于将来的搜索,我将首先列出IA-32汇编语言(NASM)的地址模式,然后再提出一个快速问题 寄存器寻址 mov eax,ebx:将ebx中的内容复制到eax中 mov esi,var:将var的地址(比如0x0040120e)复制到esi中 立即寻址(第二个操作数是立即数常量) mov bx,20:16位寄存器bx获得实际值20 直接内存寻址(通过指定地址直接从内存加载) mov ax,[1000h]:将一个2字节对象从地址4096(十六进制中为0x1

Assembly 访问违反气体读取系统调用

我不熟悉汇编语言,在我的第一步中遇到了一个问题。我有一些高级语言的经验,但我觉得在这种低级语言中我完全是个初学者 我正在Xubuntu系统上使用GNU汇编程序(gas)版本2.23 x8664 我编写了一个简单的hello world,现在我想将其扩展到以下功能: 使用syscall3读取输入 检查输入是否大于指定值 如果较短或相等,则打印输入 否则打印错误消息 如果我运行代码,它适用于较短的输入,但如果我输入的字符数超过5个,则会导致访问冲突 我和他一起工作 这是我的密码: # # aut

Assembly 装配式闹钟

我有个问题。 如果我的报警==60,我需要切换inc alarmM并重置报警,但我有一个问题 increment_alarm_second: inc alarmS ; increment alarmS cpi alarmS , 0x5A ; 0x3C ; Compare alarmS to 60 breq increment_alarm_minute ; If true, jump incMinute sw

Assembly 不同类型的汇编寄存器的用途是什么?

假设这是AT&T语法 当出现以下问题时: movl (%rdi), %ecx %rdi或%ecx的目的是什么 我理解mov(q,l,w,b)或add(q,l,w,b)等的概念 我们可以写%rdx而不是%rdi?如果是这样,会有什么变化?为什么%rdi存在?x86\u 64有16个通用寄存器。8个是从x86继承的(eax、ebx、ecx、edx、esi、edi、ebp、esp),8个是全新的(r8到r15) 过去,寄存器具有非常特定的功能 eax是主要进行算术运算的累加器寄存器 ebx是用来计

Assembly 可以在GNU汇编程序中定义一个命名的美元本地标签吗?

是否可以编写类似于.finished$:的内容,而不是1$:,并且此标签仅在定义下一个非本地标签之前有效 这样会更具描述性,几个月后我仍然会知道为什么会出现这种情况。 当然,我可以在它旁边写一条评论,但这(至少对我来说)有点费劲 如果这样的事情是不可能的,那么当然我没有其他的可能性(除了编写自定义预处理器) 来自奥地利的问候 是的。您所指出的(.finished$)非常有效 编辑:嗯,我完全错了。很抱歉误导了寻找答案的人 根据我对您问题的理解,您需要GNUas中的本地标签。据我所知,那是不可能的

Assembly CPU上奇偶校验标志的用途是什么?

某些CPU(尤其是x86 CPU)的状态寄存器上具有奇偶校验标志。此标志指示操作结果的位数是奇数还是偶数 奇偶校验标志在编程环境中的实际用途是什么? 旁注: 我认为它是为了与奇偶校验位结合使用来执行基本的错误检查,但这样的任务似乎不太可能保证整个CPU标志。回到“旧时代”,性能一直是一个问题,它更有意义。它在通信中用于验证完整性(执行错误检查),通信的大部分是串行的,这比并行通信更多地使用奇偶校验。在任何情况下,CPU仅使用8个异或门来计算它都是微不足道的,但如果没有CPU支持,则很难进行计算。

Assembly 组件配置不正确

我正在尝试使用以下命令为CMD中的ARM处理器汇编文件: as -mcpu=cortex-m3 -mthumb example1.s -o example1.o 但它不承认第一种选择:mcpu 我认为这与我键入时的事实有关:as--version 最后一行是: This assembler was configured for a target of 'mingw32' 应该说: This assembler was configured for a target of 'arm-none-

Assembly x86汇编程序未终止

我正在学习汇编,我的任务是将一个简单的程序从32位转换为64位。该程序计算2^3+5^2。我的程序编译得很好,但是,当我运行它时,程序不会终止。因此,我必须在命令行中按Ctrl+C来实际停止程序。我认为问题最初是因为我使用了int0x80终止,但在切换到syscall后,问题仍然存在 守则: 1 .section .data 2 .section .text 3 .globl _start 4 _start: 5 push $3 6 pus

Assembly 用于计数硬币的汇编程序(masm)

所以我对汇编语言还是相当陌生的。我的任务是编写一个80x86汇编语言程序(masm),以美元和美分计算和显示硬币的总价值 输入:程序从用户处读取硬币数量(便士、镍币、一角硬币和四分之一硬币) 输出:程序显示总金额的美元和美分,以及硬币的数量,并显示三行消息 我不能使用任何除法指令。数据部分必须包括四个标签,每个标签用于字符串,以提示输入硬币类型的编号 我的代码将找到硬币的数量和总价值,我只是不知道如何输出到多行。感谢您的帮助或指导。这是到目前为止我的代码 .DATA

Assembly 如何更改x86中存储在地址中的值?

我有一个寄存器,它的内容是地址。现在我想更改存储在该地址中的值,如何在x86汇编中执行此操作 比如说 mov$5,%r10 //r10包含一个地址addr,location addr存储一个值,现在我想将这个值设置为5 因为这似乎是AT&T的语法 movb $5,(%r10) 存储一个字节。汇编程序无法推断$5的大小,因此您不能使用mov,但必须直接指定movb(或者movl等,如果您的意思不是字节)。使用什么汇编程序语法?“更改存储在地址中的值”没有任何意义。您正在尝试更改寄存器中的值吗?或

Assembly 在汇编语言中向后移动指针

我正在尝试相对于文件末尾向后移动文件指针。这就是我正在做的- .model tiny .386 .data fil1 db 'testing.txt',0 dat1 db 100 dup('$') dat2 db 100 dup('$') .code .startup mov al,02h lea dx,fil1 mov ah,3dh int 21h

Assembly 理解这种分解

我有一个简单的C++声明: for (int i = 0; i < length; i++) { temp_char = OChars[i]; ... ... 我知道mov al,字节ptr[edx+0b444448h]正在将存储在OChars[I]中的字符移动到al 我不明白[edx+0B444448H]。我已经检查了寄存器0x00b4448h,它看起来是空的(尽管OChars[]中存储的字符似乎以0x00b4440开头

Assembly 在Turbo pascal中使用汇编:行太长

我有一行代码: asm ... jmp @jmp_data @s1: dw $1120,$1120,$1120,$4420,$0020,$0020,$0020,$1120,$1120,$1120,$4420,$0020,$0020,$0020,$1120,$1120,$1120,$4420,$0020,$0020,$0020,$1120,$1120,$1120,$4420,$0020,$0020,$0020; @jmp_data: ... end: 但

Assembly NASM将二进制数转换为十进制数

程序只获取1和0,并打印其十进制值。 它不能处理超过10位的数字(我需要它处理32位的数字),也不能处理以0开头的数字(比如011) 请提供帮助:)我不知道读取int的确切操作,但是如果它被相应地命名,它应该从输入中读取一个32位整数,并在EAX中返回它 这意味着您正在请求用户输入一个二进制数作为十进制数字,为了得到一个32位的数字,您需要32位十进制数字,因此一个10^32或更多或更少106位的数字 因此,这显然不是我们要走的路。您需要一次读取一个二进制数字,逐字符读取。这种从二进制数字转换为

Assembly 如何在保持一个值不变的情况下翻转SSE中的范围?

我有一个向量,包含8个范围为0的无符号8位数字。。12英寸xmm0。我想对向量中的每个元素e执行以下转换: if (e != 12) e = 11 - e; 也就是说,数字0,1,…,11更改为11,10,…,0,而12保持不变。其他值不会出现,我不关心它们会发生什么 如何使用SSE4指令集有效地执行此操作?对于SSE2(您没有问,但是…),我建议如下,重用比较中的掩码进行有趣的求反: e = (e ^ mask) + (12 & mask) 对于一个真实的面具,它会变成~e

Assembly 如何打印索引位置x86组件

我是汇编新手,正在尝试完成一个家庭作业,我想知道如何打印数组的索引位置,而不是索引处的值,我使用ESI作为指针。这里数组中填充了0和1,我只想打印1的索引。 样本数组[1 | 1 | 0 | 0 | 1] PRINT: mov eax,[esi] cmp eax,1 je Show add esi,4 loop PRINT Show: call WriteDec call Crlf loop Show 输出应为(1 2

Assembly 奔腾III CPU如何处理来自同一组的多个指令前缀?

英特尔x86规范指出,使用同一组中的多个指令前缀会导致未定义的行为。实际上,Pentium III Coppermine CPU在这种情况下的反应如何?遗憾的是,我没有芯片要测试。虽然您已经知道这一点,但为了清楚起见,我将首先说明这一点。x86指令最多可以有4个前缀(每个前缀来自不同的组),用于改变处理器对指令的解释。第2.1节: 2.1保护模式、实地址模式和虚拟8086模式的指令格式 英特尔64和IA-32体系结构指令编码是图2-1所示格式的子集。指令包括可选的指令前缀(以任何顺序)、主操作码

Assembly DIV指令跳转到随机位置?

所以我有 给出的解决方案是将DX归零,但在我的例子中,它已经是了 我的程序是将一个16位数字除以一个8位数字 我的代码是: data segment num1 dw 0204h num2 db 02h quotient db ? remainder db ? data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,num1 div num2 mov quotient,al mov rema

Assembly 为什么JB不是';不能做精确的化学机械抛光

在emu8086中,我编写了以下代码 include 'emu8086.inc' org 100h MOV AX,-1 CMP AX,0 JB case1 case2: printn 'This line should not be displayed' case1: print 'I want this line' ret 应该只打印案例1,但在本例中,输出显示两个案例。我做错了什么?JB(如果下面是跳转)用于无符号整数,类似于JNAE(如果不高于或等于跳转)

Assembly 根据x86调用约定,绘制堆栈帧并确定局部变量的地址

我的堆栈框架如下:(我不确定) 两个问题: 好吗 在这个约定中,堆栈的地址是递增的,堆的地址是递减的 没有单一的x86调用约定,本地变量的布局也不由调用约定定义。 因此,即使在考虑C类型是如何实现之前,这个问题也没有得到正确的阐述 如果我们假设: stdcall或cdecl调用约定 编译器正在使用帧指针 编译器将至少在其自然边界上对齐数据 short、int、long分别为16、32和32位,并分别在2、4和4字节上对齐 然后,我期望这个堆栈(注意,我使用十六进制表示法): 这是什么,除了

Assembly 32位保护模式不适用于多个程序集文件

我正在编写一个简单的NASM程序集引导扇区。代码应在16位实模式下将文本打印到屏幕上,然后切换到32位保护模式并将文本打印到屏幕上 我使用QEMU作为我的CPU仿真器,它以16位模式打印文本。但是,在32位模式下应该打印的文本不会打印 我认为这是我的代码的一个问题,但我也运行了这个,同样的问题是只在16位模式下工作 是我没有正确使用QEMU,还是我把其他事情搞糟了?我的代码是: 引导扇区。asm ; Boot sector that enters 32 bit protected mode [o

Assembly 如何在此汇编代码中找到错误?

这个程序将十六进制转换为一个新的数字基(基数),我有一个错误,似乎找不到它 ;This program converts number from decimal ;to a new numbering base(radix) .Model small .stack 200 .data radix db 10; radix 10 for decimal num dw 0EFE4H; temp db 10 dup(?); used to stimulate stack

Assembly 这两个指令在做什么?

我必须对一些汇编代码进行逆向工程,我不确定这些指令集在做什么 我知道al应该是eax的低位字节。但我把edx中的值放进去,edx是一个四字节寄存器。那么当我移动它时,艾尔会变成什么 mov al, [edx] mov [ebp+var_19], al 这些指令都在移动一个字节。第一个将edx寄存器中32位内存地址的内容加载到al中。第二个将相同的值从al移动到ebp中包含的内存地址中,再加上一个常量偏移量。恒定偏移量可能是第19个本地堆栈插槽,或者可能是第19个参数字。但这取决

Assembly 系统调用请求文件的信息(如果存在)

我试图在MikeOS操作系统中设计和实现一个系统调用。可通过MikeOS中的命令行界面(CLI)访问该调用。我正在尝试进行系统调用INFO,该调用将显示请求文件(如果存在)的信息(未格式化)。显示的信息包括 属性字节 创建时间 创建日期 最后访问日期 最后写入时间 文件大小(字节) 我应该在那里添加系统调用以获取信息。我不知道怎么做,也不知道从哪里开始。我在序列中添加了,但找不到任何好的例子来调用信息或如何这样做 源代码 您可以通过查看Mike是如何获得文件大小的api调用来轻松实现这一点。

Assembly asm表达式'64-$+;缓冲区是什么意思?

我正在阅读NASM文档,并在第节中理解了以下代码 他们说这个代码将存储足够的空间,使缓冲区的总长度达到64。不幸的是,我一点也没明白。应该返回数字的表达式64-$+buffer似乎非常可疑。所以,如果我没有理解正确,我希望有人解释一下语义。我的知识不足以打印结果数字,也不足以检查空间是否按预期分配。以下是我如何尝试对其进行反分析: 64-$+buffer是一个返回数字的算术表达式 $是当前位置,应等于13 buffer是一个带标签的位置,如果它是节.data的开头,则等于0。否则,我们很快就会得

Assembly 无法理解此程序集x86代码

我不明白为什么“sub_18054DFD0”函数使用“crypto\rsa\rsa_ossl.c”的地址作为参数而不使用它( “crypto\rsa\rsa_ossl.c”是openssl api库中的一个文件。) 我想知道它是否调用了rsa_ossl库中的函数 .text:00000001805BF4E7 loc_1805BF4E7: ; DATA XREF: .rdata:0000000180902990o .text:00000001805

Assembly 在NASM中,内存中彼此相邻的标签会导致打印问题

我在NASM编程时遇到问题。我正在学习如何纯粹在汇编中开发操作系统,并从创建引导加载程序开始 我目前的目标是使用BIOS中断0x10打印“你好,世界!”和“再见” 我似乎遇到的问题发生在屏幕上打印值时。两个标签在内存中相邻,导致打印一个字符串时打印另一个字符串的内容 为什么hlen不在第一个字符串的末尾停止循环 [org 0x7c00] mov ah, 0x0e mov bx, HELLO_MSG mov cx, hlen

Assembly Core Wars 8086安全挑战(安全使用内存地址上的加法)

我在做保险箱比赛,我得到了这个保险箱: start: add ds:0DEDh, ax xor cx, cx loop start 据我所知,cx在循环结束时将为0,并在下一次迭代时更改为FFFF。 我还知道0xCCh是一条非法指令,它会停止程序。我怎样才能打开这个保险箱 **编辑: 这里的目标是阻止这个无限循环。循环没有停止项,我需要以某种方式使它停止使用反向工程。 例如: 这是一个简单的保险箱 safe: mov ax, ds:4D2h cmp

Assembly 在该代码中,切换到32位保护模式发生在何处

我读过关于如何从默认实数模式切换到保护模式的文章,我想知道代码中的切换发生在哪里。有一部分是我抄袭的,但我并不完全理解,那就是: global loader global stack_ptr extern main MODULEALIGN equ 1<<0 MEMINFO equ 1<<1 FLAGS equ MODULEALIGN | MEMINFO MAGIC equ 0x1BADB002 CHECKSUM equ -(MAGIC + FLAGS) sectio

Assembly 将基本递归C函数转换为汇编

我在汇编中编写递归函数时遇到了一些问题。我想在这里为C函数建模: int power(int base, int exponent) { if (exponent==0) return 1; else { /* return base * power(base, --exponent); -- in normal form, writing in long-form below*/ exponent--; int t

Assembly x86-64 gcc不';t为局部变量指定堆栈帧

我在学习汇编代码时遇到了一些问题 我使用“编译器资源管理器”,这是一个支持很多编译器的网站 我编写了一个简单的代码,并将其编译为x86-64 gcc : : 总和(整数,整数): 主要内容: 据我所知,在x86中,堆栈表示局部变量和保存返回地址等 我看不到函数序言中关于“子rsp”的任何内容。我也看不到函数尾声中的“add rsp.”。可能是因为您的代码中没有局部变量?@tofro:main是一条红鲱鱼,可以省略它。问题是关于sum,它确实会将其函数args溢出到堆栈中。(在RSP下面的红色区域

Assembly NASM结构中的搜索

在NASM结构中搜索 我有结构{string;num},我需要通过控制台输入在这个结构中进行搜索。我输入字符串,必须在结构中输出该字符串的num,但不工作 我认为这个字符串有问题(在搜索标签中) 否则我不知道如何从结构中提取数字并输出(在成功标签中) 所有代码 global Start STD_OUTPUT_HANDLE equ -11 STD_INPUT_HANDLE equ -10 EXTERN GetStdHandle EXTERN WriteFile EXTERN ExitProces

上一页 1 2 ...  6   7   8   9    10   11   12  ... 下一页 最后一页 共 493 页