汇编语言提示输入个人信息并写入文本文档,人数不限

WriteConsoleOutputCharacterA proto
CreateFileA                  proto
WriteFile                    proto
ReadConsoleA                 proto
ExitProcess                  proto
GetStdHandle                 proto
SetConsoleCursorPosition     proto
CloseHandle                  proto
big                          proto
.data
FILE_BEGIN         =  0
FILE_CURRENT       =  1
CREATE_ALWAYS      = 2
DO_NOT_SHARE = 0
GENERIC_WRITE    = 40000000h
NULL = 0
STD_OUTPUT_HANDLE = -11
STD_INPUT_HANDLE = -10
FILE_ATTRIBUTE_NORMAL           = 80h
STD_INPUT_HANDLE = -10	
COORD STRUCT
  X WORD 0
  Y WORD 0
COORD ENDS
nb qword 0
MMM COORD <0,0>
hhh qword 0
filehandle qword ?
max = 50;最大输入字符数加2
dta byte max dup (0) 
fn byte "myfile.txt",0
ddd byte "ID:"
    byte "lastname:"
    byte "firstname:"
    byte "birthday:"
consoleOutHandle qword ?
consoleInHandle qword ?
dat qword 0
.code
main proc
  sub rsp,40
  mov rcx,STD_OUTPUT_HANDLE
  call GetStdHandle
  mov consoleOutHandle,rax
  mov rcx,STD_INPUT_HANDLE
  call GetStdHandle
  mov consoleInHandle,rax
  mov rcx,2;输入学生人数
  call sr 
  add rsp,40
  mov ecx,0
  call ExitProcess
main endp
sr proc
  sub rsp,72
  mov r12,rcx
  mov rcx,offset fn
  mov rdx,GENERIC_WRITE
  mov r8,DO_NOT_SHARE
  mov r9,NULL
  mov qword ptr [rsp + 4 * SIZEOF qword],CREATE_ALWAYS
  mov qword ptr [rsp + 5 * sizeof qword],FILE_ATTRIBUTE_NORMAL
  mov qword ptr [rsp + 6 * sizeof qword],0
  call CreateFileA
  mov filehandle,rax
  mov rbx,offset ddd
L3:
  mov rcx,4
L2:
  push rcx
  push rbx   ;设置rdi即前缀字数
  call big 
  pop rbx
  mov rcx,consoleOutHandle
  mov rdx,rbx
  mov r8,rdi
  mov rbp,offset MMM
  mov r9,[rbp]
  mov rbp,offset hhh
  mov qword ptr [rsp + 4 * sizeof qword],rbp
  call WriteConsoleOutputCharacterA
  mov ax,word ptr hhh
  add MMM.X,ax
  mov rcx,consoleOutHandle
  mov rbp,offset MMM
  mov rdx,[rbp] 
  call SetConsoleCursorPosition
  inc  MMM.Y
  mov MMM.X,0
  mov rcx,consoleInHandle
  mov rdx,offset dta
  mov r8,max
  mov r9,offset dat
  mov qword ptr [ rsp + 4 * sizeof qword ],0
  call ReadConsoleA
  mov rcx,filehandle
  mov rdx,rbx
  mov r8,rdi
  mov r9,offset hhh
  mov qword ptr [rsp + 4 * sizeof qword],0
  call WriteFile
  mov rcx,filehandle
  mov rdx,offset dta
  mov r8,max
  mov r9,offset hhh
  mov qword ptr [ rsp + 4 * sizeof qword ],0
  call WriteFile
  call big  ;设置rbx即前缀偏移量
  pop rcx
  dec rcx
  jne L2
  mov rbx,offset ddd 
  dec r12
  jne L3
  mov rcx,filehandle
  call CloseHandle
  add rsp,72
  ret
sr endp
big proc   ;获得前缀数量和偏移量
  mov rdi,0
 L4:
  mov cl,[rbx]
  cmp cl,':'
  je L5
  inc rdi
  inc rbx
  jmp L4
L5:
  inc rdi
  inc rbx
  ret
big endp
end 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值