汇编_结构体处理
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编_结构体处理相关的知识,希望对你有一定的参考价值。
问题描述:
思路:
采用基址+偏移的方式对原始数据和结果进行索引,基址可以通过计算得出,年份和销售额采用dx寄存器通过4字节偏移,人数通过采用si寄存器通过2字节偏移,结果通过di寄存器15字节偏移。
初始版:
assume cs:codesg,ds:data,ds:result
data segment
db '1975','1976','1977','1978','1979','1980';[0]-[17h]
dd 16,22,382,1356,8000,16000;[18h]-[2fh]
dw 3,7,9,13,28,38;[30h]-[42h]
data ends
result segment
db 6 dup("year sumn ne ??")
result ends
codesg segment
start:
;初始化寄存器
mov ax, data
mov ds, ax;存放初始数据
mov ax, result
mov es, ax;存放结果
mov bx, 0;dd 的偏移
mov si, 0; dw 的偏移
mov di, 0; 结果的偏移
mov cx, 6;循环变量
s: mov al, [bx];录入年份
mov es:[di], al
mov al, [bx+1]
mov es:[di+1], al
mov al, [bx+2]
mov es:[di+2], al
mov al, [bx+3]
mov es:[di+3], al
mov al, 20h;
mov es:[di+4], al;录入空格
mov ax, 18h[bx];录入销售额低位
mov es:5h[di], ax
mov ax, 18h[bx+2]
mov es:7h[di], ax
mov al, 20h;
mov es:[di+9], al;录入空格
mov ax, 30h[si];录入总人数
mov es:0Ah[di], ax
mov al, 20h;
mov es:[di+12], al;录入空格
mov ax, 18h[bx];录入人均收入
mov dx, 18h[bx+2]
div word ptr ds:30h[si];这里一定要定义是ds的代码段
mov es:0Dh[di], ax
add bx, 4
add si, 2
add di, 0fh
loop s
mov ax, 4c00h
int 21h
codesg ends
end start
试验结果:
优化版:
减去了重复录入空格,并且把年份的顺序录入改为了循环录入。
assume cs:codesg,ds:data,ds:result,ss:stack
data segment
db '1975','1976','1977','1978','1979','1980';[0]-[17h]
dd 16,22,382,1356,8000,16000;[18h]-[2fh]
dw 3,7,9,13,28,38;[30h]-[42h]
data ends
result segment
db 6 dup("year sumn ne ??")
result ends
stack segment
db 0,0,0
stack ends
codesg segment
start:
;初始化寄存器
mov ax, data
mov ds, ax;存放初始数据
mov ax, result
mov es, ax;存放结果
mov ax, stack
mov ss, ax
mov sp, 6
mov bx, 0; dd 的偏移
mov si, 0; dw 的偏移
mov di, 0; 结果的偏移
mov cx, 6;循环变量
s: push cx
push si
push bx
mov si, bx;记录年份的基址
mov bx, 0;记录共同的偏移
mov cx, 4;内循环四次
s0:
mov al, [bx+si];录入年份
mov es:[bx+di], al
inc bx
loop s0
pop bx
pop si
pop cx
mov ax, 18h[bx];录入销售额低位
mov es:5h[di], ax
mov ax, 18h[bx+2]
mov es:7h[di], ax
mov ax, 30h[si];录入总人数
mov es:0Ah[di], ax
mov ax, 18h[bx];录入人均收入
mov dx, 18h[bx+2]
div word ptr ds:30h[si];这里一定要定义是ds的代码段
mov es:0Dh[di], ax
add bx, 4
add si, 2
add di, 0fh
loop s
mov ax, 4c00h
int 21h
codesg ends
end start
试验结果:
以上是关于汇编_结构体处理的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段