Ir ao conteúdo

Assembly Como somar 2 + 4 usando assmenbly para um sistema IAS simplificado?


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

O professor pediu para fazer um programa em assembly para um sistema IAS simplificado usando hexadecimal
 

ele pediu para:
guardar o valor 2 no registrador B

guardar o valor 4 no registrador C

somar ambos e salvar o resultado no registrador A

 e o pior que é para fazer tudo em Hexa de acordo com esse pdf:
https://www.ic.unicamp.br/~edson/disciplinas/mc404/2016-2s/abef/anexos/programando_o_IAS.pdf
Dessa forma:
https://imgur.com/a/gNn3hft

e rodar o programa nesse Simulador:
https://www.ic.unicamp.br/~edson/disciplinas/mc404/2017-2s/abef/IAS-sim/

o mais perto que eu consegui foi:

000 01 002 21 00B #linha 000, LOAD 2, STORE 00B

001 01 004 21 00C #linha 001, LOAD 4, STORE 00C

002 05 006 21 00A #linha 002, ADD 2, STORE 00A

003 0D 003 00 000 #linha 003, HALT, blank

 

porém, estou literalmente respondendo pelo programa e também não sei ler o output e não sei se o resultado está certo, e de acordo com o pdf só dá para colocar operações e endereços no programa, não dei colocar dados (no caso o número 2 e o 4), então eu coloque o endereço 2 e 4, mas também não sei se está certo.

 

então basicamente, carreguei memória 2, salvei na memória 11, carregei memória 4, salvei na memória 12, adicionei memória 2, salvei na memória 10, para mim isso não faz sentido nenhum.

 

C++:

main(){
	int A,B,C;
	B = 2; 		//	(01 002 21 00B) LOAD 2	, STORE B;
  	C = 4; 		//	(01 004 21 00C) LOAD 4	, STORE C;
  	A =  + C; 	//	(05 000 21 00A) ADD 	, STORE A;
	        	//	(0D 003 00 000) HALT	,        ;
 }
para mim isso faria mais sentido:

main(){
	int A;
	A = 2 + 4; 	(01 002 05 004) LOAD 2, ADD 4; (21 00A 0D 003) STORE M(00A), HALT;
}

 

  • Curtir 1
  • Solução
Postado

@Cairo Alberto Assim você está tentando mover o dado diretamente com LOAD, mas essa instrução move entre o registrador e a memória. No documento mostra que para colocar o dado na memória tem as diretivas ORG e WORD. A primeira para indicar a posição da memória e segunda o dado, p.ex,

 

.org 0x100
.word 0x2
.word 0x4

 

  • Curtir 2
Postado

ficarial algo desse jeito então?


 

000 .org 0x00B  #M(00B) <-- 0x2 | Despejar na memória 00B .word 0x2 
001 .word 0x2 

002 .org 0x00C  #M(00C) <-- 0x4 | Despejar na memória 00C .word 0x4 
003 .word 0x4 

004 .org 0x00A #Despeja na memória 0x00A, tudo abaixo:

005 01 00B 05 00C #LOAD  AC <-- M(00B)  , ADD AC <-- M(00C)
006 21 00A 0D 003 #STORE M(00A) <-- AC , HALT



Porém não entendi pelo documento como colocar as diretivas .org e .word em hexadecimal como o professor pediu, além de não funcionar no simulador

  • Amei 1
Postado

@Cairo Alberto Pode colocar a diretiva no inicio ou no fim. Basta uma vez,

 

load M(0xA)
add M(0xB)

.org 0xA
.word 0x2
.word 0x4

 

No simulador, a instrução load vai pegar o valor 2 do endereço 0xA e colocar no registrador AC para depois somar AC com o conteúdo de 0xB.

 

Os dois passos, veja o registrador AC,

IAS1.png.5fcea3e5b879cd2363d471072a22733e.png IAS2.png.2bbe4b79bab42eb5067a10cd89c83035.png

 

E a memória em hexadecimal,

memoria.png.8b367d878e0f80ccbe6089e2598c4396.png

 

Mas o enunciado pede para primeiro guardar no registrador B, depois no C e salvar o resultado no A.

  • Curtir 2
Postado

 consegui, o programa faz a soma, e da para ver na memória o resultado,
 

000 01 00B 05 00C # LOAD M(00B), ADD M(00C)
001 21 00A 0D 001 #STORE M(00A), HALT (loop infinito)
00B 00 000 00 002 #WORD (002) -- > M(00B)
00C 00 000 00 004 #WORD (004) -- > M(00C)
 

  • Curtir 2
Postado

@Cairo Alberto Assim está guardando os valores nos endereços da memória (0xA, 0xB e 0xC) e não nos registradores como diz o enunciado. Essa arquitetura tem 1024 palavras de memória, onde seus dados são armazenados com WORD naquelas posições. E tem os registradores na Unidade de Controle e na ULA com AC e MQ para operações lógicas e aritméticas.

  • Curtir 1
Postado

também notei isso, mas acho que foi uma falha na comunicação do professor, mostrei esse código para o professor e ele disse que estava correto e que eu poderia entregar daquele jeito, realmente não achei como endereçar os registradores, apenas os  endereços de memória, mas também ele ainda não passou como, então acho que ele ainda vai passar, no simulado os registradore (MAR, PC, IR, IBR) é meio que automático, não tem como endereçar-los como que o professor passou em aula.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!