Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2023, 21:12   #1
katenka2023
Новичок
Джуниор
 
Регистрация: 24.04.2023
Сообщений: 7
Печаль Как вывести первую цифру трехзначного числа ? fasm

Как вывести первую цифру трехзначного числа ?
Я совсем не могу понять как это сделать, надеюсь великие умы этого форума мне помогут
katenka2023 вне форума Ответить с цитированием
Старый 24.04.2023, 21:32   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
; fasm1 ver. 1.73.30
; Linux x86_64 ELF

format ELF64 executable 3
segment executable
entry $
	mov	eax, 123 ; исходное 3-х значное число
	mov	ecx, 100 ; делитель, для получения в частном первой цифры, а в остатке двух младших
	cdqe ; eax --знаковое расширение--> edx:eax
	div	ecx ; eax = edx:eax div ecx = 1; edx = edx:eax mod ecx = 23
	add	al, '0' ; частное переводим в строковый вид
	push	rax ; сохраняем в буфере для вывода в консоль
	mov	rdx, 1 ; количество символов в буфере для вывода
	mov	rsi, rsp ; указатель на буфер
	push	1 ; SYS_WRITE - команда записи в хэндл
	push	0 ; STDOUT - стандартный поток вывода
	pop	rdi ; rdi = 0
	pop	rax ; rax = 1
	syscall ; системный вызов SYS_WRITE(STDOUT, '1', 1)
	xor	rdi, rdi ; код завершения (0 - все в порядке)
	push	60 ; SYS_EXIT - команда завершения работы программы
	pop	rax ; rax = 60
	syscall ; системный вызов SYS_EXIT(0)
Код:
$ fasm -m 1024 ./main.asm
flat assembler  version 1.73.30  (1024 kilobytes memory)
1 passes, 163 bytes.
$ readelf -h ./main
Заголовок ELF:
  Magic:   7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 
  Класс:                             ELF64
  Данные:                            дополнение до 2, от младшего к старшему
  Version:                           1 (current)
  OS/ABI:                            UNIX - GNU
  Версия ABI:                        0
  Тип:                               EXEC (Исполняемый файл)
  Машина:                            Advanced Micro Devices X86-64
  Версия:                            0x1
  Адрес точки входа:                 0x400078
  Начало заголовков программы:       64 (байт в файле)
  Начало заголовков раздела:         0 (байт в файле)
  Флаги:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         1
  Size of section headers:           64 (bytes)
  Number of section headers:         0 (64)
  Section header string table index: 0
$ ./main
1

Последний раз редактировалось macomics; 24.04.2023 в 21:55.
macomics вне форума Ответить с цитированием
Старый 24.04.2023, 21:36   #3
katenka2023
Новичок
Джуниор
 
Регистрация: 24.04.2023
Сообщений: 7
По умолчанию

macomics, Извините за глупый вопрос, а это полный код, я просто пыталась понять и везде разный вид
katenka2023 вне форума Ответить с цитированием
Старый 24.04.2023, 21:45   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Полный. В первом тексте программа, а во втором вывод в консоль с командами, начиная от компиляции fasm, проверку программы и её исполнение

ADD: Добавил комментарии

P.S. компилятор вы указали, но не указали режим и ОС, для которой вам надо. Сейчас вам представлен код для 64-битного Linux

Последний раз редактировалось macomics; 24.04.2023 в 21:58.
macomics вне форума Ответить с цитированием
Старый 24.04.2023, 22:19   #5
katenka2023
Новичок
Джуниор
 
Регистрация: 24.04.2023
Сообщений: 7
По умолчанию Ошибка

macomics, Просто у меня при попытке запустить код, вылазит вот это ошибка
Изображения
Тип файла: png изображение_2023-04-24_221815539.png (11.9 Кб, 9 просмотров)
katenka2023 вне форума Ответить с цитированием
Старый 24.04.2023, 22:22   #6
katenka2023
Новичок
Джуниор
 
Регистрация: 24.04.2023
Сообщений: 7
По умолчанию

macomics, Извините, что не указала, пишу я на Windows а насчет режима , я не знаю, что указать, ну и нужно мне под Windows.
katenka2023 вне форума Ответить с цитированием
Старый 24.04.2023, 23:02   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вот тоже самое, но для 32-битной Windows. Можно запускать через fasmw.exe
Код:
; fasm1 ver. 1.73.30
; Windows EXE 32-bit
; INCLUDE=FASM\INCLUDE

format PE CONSOLE 5.0 at 0x00010000
include "win32a.inc"
section '.idata' import data readable writeable
library kernel32.dll,   "kernel32.dll"
import  kernel32.dll,\
        ExitProcess,    "ExitProcess",\
        GetConsoleMode, "GetConsoleMode",\
        GetStdHandle,   "GetStdHandle",\
        ReadConsoleA,   "ReadConsoleA",\
        SetConsoleMode, "SetConsoleMode",\
        WriteConsoleA,  "WriteConsoleA"
section '.text' code readable executable
entry $
      mov     eax, 123
      mov     ecx, 100
      cdq
      idiv    ecx
      add     al, '0'
      push    eax
      mov    word [esp + 1], 0x0A0D
      invoke  GetStdHandle, STD_OUTPUT_HANDLE
      lea     ecx, [esp - 4]
      mov     edx, esp
      invoke  WriteConsoleA, eax, edx, 3, ecx, NULL, NULL
      pop     edx
      pop     ecx
      invoke  GetStdHandle, STD_INPUT_HANDLE
      mov     ebx, eax
      invoke  GetConsoleMode, ebx, esp, NULL
      mov     eax, [esp]
      and     eax, not 6 ; not (ENABLE_ECHO_INPUT or ENABLE_LINE_INPUT)
      invoke  SetConsoleMode, ebx, eax
      lea     edx, [esp - 8]
      lea     ecx, [esp - 4]
      invoke  ReadConsoleA, ebx, edx, 1, ecx, NULL, NULL, NULL
      pop     edx
      pop     edx
      invoke  SetConsoleMode, ebx
      invoke  ExitProcess, 0

Последний раз редактировалось macomics; 24.04.2023 в 23:04.
macomics вне форума Ответить с цитированием
Старый 24.04.2023, 23:17   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Перепишу, чтобы вынести код одной из полезных подпрограмм. Она заставляет остановиться программу до нажатия ровно одной клавиши, а не Enter. В будущих программах сможете её использовать скопировав кусок текста из этого исходника.
Код:
; fasm1 ver. 1.73.30
; Windows EXE 32-bit
; INCLUDE=FASM\INCLUDE

format PE CONSOLE 5.0 at 0x00010000
include "win32a.inc"
section '.idata' import data readable writeable
library kernel32.dll,   "kernel32.dll"
import  kernel32.dll,\
        ExitProcess,    "ExitProcess",\
        GetConsoleMode, "GetConsoleMode",\
        GetStdHandle,   "GetStdHandle",\
        ReadConsoleA,   "ReadConsoleA",\
        SetConsoleMode, "SetConsoleMode",\
        WriteConsoleA,  "WriteConsoleA"
section '.text' code readable executable
entry $
      mov     eax, 123
      mov     ecx, 100
      cdq
      idiv    ecx
      add     al, '0'
      push    eax
      mov    word [esp + 1], 0x0A0D
      invoke  GetStdHandle, STD_OUTPUT_HANDLE
      lea     ecx, [esp - 4]
      mov     edx, esp
      invoke  WriteConsoleA, eax, edx, 3, ecx, NULL, NULL
      pop     edx
      pop     ecx
      call    WaitAnyKey
      invoke  ExitProcess, 0

; Вот пропрограмма ожидания нажатия любой клавиши. Добавил вывод соответствующего сообщения, чтобы была понятна причина остановки.
define ENABLE_ECHO_INPUT 4
define ENABLE_LINE_INPUT 2
WaitAnyKey:
      push    ebx
      push    NULL
      push    NULL
      push    NULL
      invoke  GetStdHandle, STD_OUTPUT_HANDLE
      lea     edx, [.message]
      lea     ecx, [esp + 4]
      invoke  WriteConsoleA, eax, edx, .message.Length, ecx, NULL
      invoke  GetStdHandle, STD_INPUT_HANDLE
      mov     ebx, eax
      invoke  GetConsoleMode, ebx, esp
      mov     eax, [esp]
      and     eax, not (ENABLE_ECHO_INPUT or ENABLE_LINE_INPUT)
      invoke  SetConsoleMode, ebx, eax
      lea     edx, [esp + 8]
      lea     ecx, [esp + 4]
      invoke  ReadConsoleA, ebx, edx, 1, ecx, NULL
      invoke  SetConsoleMode, ebx
      add     esp, 8
      pop     ebx
      retn
  .message db 13, 10, 'Press any key. . .', 13, 10, 13, 10
  .message.Length = $ - .message

Последний раз редактировалось macomics; 24.04.2023 в 23:21.
macomics вне форума Ответить с цитированием
Старый 24.04.2023, 23:25   #9
katenka2023
Новичок
Джуниор
 
Регистрация: 24.04.2023
Сообщений: 7
По умолчанию

macomics, Спасибо большое, очень сильно помогли мне! Можете пожалуйста ответить еще на один вопрос, какими действиями можно выполнить действие фото?
Изображения
Тип файла: png изображение_2023-04-24_232331489.png (3.4 Кб, 8 просмотров)
katenka2023 вне форума Ответить с цитированием
Старый 24.04.2023, 23:31   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вот. На FPU
Код:
; секция данных
x1 dd 2.0f
y1 dd 5.0f
x2 dd 10.2f
y2 dd -2.5f
result dq ?
; код
fld [x2] ; st0 = x2
fsub [x1] ; st0 = x2 - x1
fmul st0, st0 ; st0 = (x2 - x1)^2
fld [y2] ; st0 = y2; st1 = (x2 - x1)^2
fsub [y1] ; st0 = y2 - y1; st1 = (x2 - x1)^2
fmul st0, st0 ; st0 = (y2 - y1)^2; st1 = (x2 - x1)^2
faddp st1, st0 ; st0 = (x2 - x1)^2 + (y2 - y1)^2
fsqrt ; st0 = квадратный корень((x2 - x1)^2 + (y2 - y1)^2)
fstp [result]
Чтобы было проще, тогда скачайте себе ещё и отладчик. Например, OllyDBG или x64dbg

Они помогут искать логические ошибки в программах.

Последний раз редактировалось macomics; 24.04.2023 в 23:34.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти первую цифру в десятичной записи четырехзначного натурального числа Marcus75 Помощь студентам 2 24.04.2016 20:19
Присвоить целой переменной d первую цифру из дробной части положительного вещественного числа x(так, если х=32.597, то d=5). michaeldurden Общие вопросы C/C++ 1 17.12.2015 14:33
Первую цифру числа удалить прибавить к тому что осталось Наташа17 Visual C++ 2 28.02.2015 18:42
Программка Delphi - надо вывести в строку все простые натуральные числа, которые меньше задаваемого трехзначного N Наталья30111992 Помощь студентам 1 30.10.2013 07:16
Как вывести числа от 0 до 9 при помощи FASM? Lamo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.12.2010 16:24