Sida 2 av 3
Postat: 20 januari 2008, 12:55:20
av JustNeed
sodjan: Jag trodde ASM-instruktionerna kunde direktöversättas till maskinkod. Isf är det väl inte helt fel (även fast det är en rätt grov lögn).
Hursomhelst, var människa borde skriva minst ett program i ASM. Visserligen är det superdrygt att göra, men man lär sig tänka rätt. Om man inte börjar direkt med assembler så bör man iaf ha en kompilator som skriver ut i asm också så att man kan se hur det blir strukturerat.
Postat: 20 januari 2008, 13:27:21
av TomasL
Jo så är det:
ASM är en samling MNEONICS, dvs mänskligt läsbara förkortningar till maskinkoden, varje processor har sin egen uppsättning MNEONICS, dvs det finns överhuvudtaget ingen som helst logik mellan olika processorer, det som heter en sak på den ena, heter nått helt annat på en annan, eftersom det inte finns nån form av gemenskap mellan "orden", ej heller nån form av gemenskap mellan ev syntax, så per definition är ASM ej något språk, ASM kan alltid direkt översättas till hex-kod eller till binärkod, vilket man föredrar bäst.
Att olika kompilatorer sedan infogat diverse felkontroll och macron, har inget med ev språk att göra, snarare assemblator specifikt.
Notera att det inte finns några assembler-kompilatorer, utan det heter assemblator, därför att en assemblator sammanfogar de instruktioner man skrivit i ASM, dvs maskinkod, till ett program.
En kompilator kompilerar källkod, från komplexa källkodsinstruktioner till enkla maskinkods/ASM instruktioner
Skillnaden mot till exempel C är mycket stor, i C har man en strikt syntax, oberoende vilket mål man skriver mot, alla "ord" är samma oavsett målsystem, gör man fel, så får man ett felmeddelande, samma oavsett vilket mål eller i vilken miljö man använder.
Postat: 20 januari 2008, 15:16:42
av bos
Tomas: Ett mycket faktaspäckat inlägg, nyttigt att läsa. Men:
TomasL skrev:ASM är inget språk, utan ren maskinkod
Det är så fel det kan bli. Om assembler inte hade varit ett språk, och alltså varit maskinkod, så hade man inte behövt någon assembler (program) som gör om assemblerkoden till maskinkod och sen en hex-fil innan det programmeras in på en krets. Detta behöver man naturligtvis, och alltså är ditt påstående falskt.
Postat: 20 januari 2008, 15:20:19
av bos
TomasL skrev:
ASM är en samling MNEONICS
Korrekt (förutom att det heter mnemonics).
TomasL skrev:
i ASM, dvs maskinkod
Fel. Du kan inte (eller ja, det är väl en definitionsfråga) programmera din .asm-fil till en PIC-krets utan att först göra om den till maskinkod. Assembler är inte maskinkod, och det faktum som fluktar lite på, att det är ett "one-to-one relationship", har inte så mycket med saken att göra. Assembler blir inte mer maskinkod för det.
Postat: 20 januari 2008, 18:41:00
av TomasL
Har lagt upp
The Quintessential PIC Microcontroller på min manualsida, det är en hyffsad bra "nybörjargenomgång" av PIC uC
Postat: 20 januari 2008, 19:03:32
av Hexagon
Hehe...
Heta diskutioner om vad som är vad. Givetvis hänger jag inte med för fem öre, men det är ändå intressant att läsa. Ska nog gå tillbaka till den här tråden om ett par månader och se om jag begriper vad ni snackar om
Jag har ju för hoppningsvis fått lite mer kött på benen då (eller... än så länge får man väl vara glad om man får lite skin på benen...)
Passar på att be om ursäkt för min benägenhet att skriva "..." i tid och otid. Gör inte jag det så är det väl någon annan som påpekar det snart nog

Vet inte vart jag fått det ifrån. Man får väl se det som en slags tourettes syndrom (Stavas det så?) i skriftlig form...
Fortsätter att följa era länkar och läsa allt jag kommer över. Evigt tacksam för allt! Frågorna börjar samlas på hög, men jag lugnar mig ett tag till med att ställa dom här. Några av dom kanske kan falla på plats av sig själv.
Vad vet man!?
Tack och bock...
Postat: 20 januari 2008, 22:21:35
av sodjan
> diverse felkontroll och macron,...
OK, Här är "diverse" prylar i MPASM som inte är "maskinkod" :
4.2.1 Control Directives
Control directives control how code is assembled.
#define Define a Text Substitution Label.............................................. p. 68
#include Include Additional Source File .............................................. p. 92
#undefine Delete a Substitution Label................................................. p. 117
constant Declare Symbol Constant ..................................................... p. 60
end End Program Block.......................................................................... p. 71
equ Define an Assembler Constant ........................................................ p. 74
org Set Program Origin.......................................................................... p. 100
processor Set Processor Type ............................................................ p. 106
radix Specify Default Radix .................................................................. p. 106
set Define an Assembler Variable ......................................................... p. 109
variable Declare Symbol Variable....................................................... p. 118
4.2.2 Conditional Assembly Directives
Conditional assembly directives permit sections of conditionally assembled code.
These are not run-time instructions like their C language counterparts. They define
which code is assembled, not how the code executes.
else Begin Alternative Assembly Block to if Conditional..................... p. 71
endif End Conditional Assembly Block................................................. p. 72
endw End a while Loop ........................................................................ p. 73
if Begin Conditionally Assembled Code Block...................................... p. 88
ifdef Execute If Symbol has Been Defined.......................................... p. 90
ifndef Execute If Symbol has not Been Defined.................................. p. 91
while Perform Loop While Condition is True......................................... p. 119
4.2.3 Data Directives
Data directives control the allocation of memory and provide a way to refer to data
items symbolically, i.e., by meaningful names.
__badram Identify Unimplemented RAM............................................... p. 48
__badrom Identify Unimplemented ROM............................................... p. 49
__config Set Processor Configuration Bits .......................................... p. 58
config Set Processor Configuration Bits (PIC18 MCUs) ...................... p. 59
__idlocs Set Processor ID Locations .................................................. p. 87
__maxram Define Maximum RAM Location ........................................... p. 97
__maxrom Define Maximum ROM Location........................................... p. 98
cblock Define a Block of Constants ...................................................... p. 54
da Store Strings in Program Memory (PIC12/16 MCUs) ........................ p. 61
data Create Numeric and Text Data ...................................................... p. 62
db Declare Data of One Byte .................................................................. p. 65
de Declare EEPROM Data Byte ............................................................. p. 67
dt Define Table (PIC12/16 MCUs).......................................................... p. 70
dw Declare Data of One Word................................................................. p. 70
endc End an Automatic Constant Block ................................................. p. 72
fill Specify Program Memory Fill Value .............................................. p. 82
res Reserve Memory ............................................................................. p. 107
4.2.4 Listing Directives
Listing directives control the MPASM assembler listing file format. These directives
allow the specification of titles, pagination, and other listing control. Some listing
directives also control how code is assembled.
error Issue an Error Message...............................................................p. 74
errorlevel Set Message Level............................................................p. 76
list Listing Options ...............................................................................p. 93
messg Create User Defined Message.....................................................p. 98
nolist Turn off Listing Output ...............................................................p. 100
page Insert Listing Page Eject ................................................................p. 103
space Insert Blank Listing Lines.............................................................p. 110
subtitle Specify Program Subtitle .......................................................p. 110
title Specify Program Title...................................................................p. 111
4.2.5 Macro Directives
Macro directives control the execution and data allocation within macro body
definitions.
endm End a Macro Definition...................................................................p. 73
exitm Exit from a Macro.........................................................................p. 78
expand Expand Macro Listing ................................................................p. 80
local Declare Local Macro Variable ......................................................p. 94
macro Declare Macro Definition..............................................................p. 96
noexpand Turn off Macro Expansion......................................................p. 100
4.2.6 Object File Directives
Object file directives are used only when creating an object file.
access_ovr Begin an Object File Overlay Section in Access
RAM (PIC18 MCUs) ...................................................................................p. 56
bankisel Generate Indirect Bank Selecting Code (PIC12/16 MCUs)... p. 50
banksel Generate Bank Selecting Code ...............................................p. 52
code Begin an Object File Code Section ................................................p. 56
code_pack Begin an Object File Packed Code
Section (PIC18 MCUs) ...............................................................................p. 65
extern Declare an Externally Defined Label .........................................p. 80
global Export a Label............................................................................p. 84
idata Begin an Object File Initialized Data Section ...............................p. 85
idata_acs Begin an Object File Initialized Data Section
in Access RAM (PIC18 MCUs) ...................................................................p. 94
pagesel Generate Page Selecting Code (PIC10/12/16 MCUs) ............p. 103
pageselw Generate Page Selecting Code Using WREG Commands
(PIC10/12/16 MCUs) ..................................................................................p. 105
udata Begin an Object File Uninitialized Data Section...........................p. 111
udata_acs Begin an Object File Access Uninitialized Data
Section (PIC18 MCUs) ...............................................................................p. 120
udata_ovr Begin an Object File Overlaid Uninitialized Data Section....p. 114
udata_shr Begin an Object File Shared Uninitialized Data
Section (PIC12/16 MCUs) ..........................................................................p. 124
Följande har inte heller direkt något med "maskinkod" att göra :
Kod: Markera allt
TABLE 3-4: ARITHMETIC OPERATORS AND PRECEDENCE
Operator Example
$ Current/Return program counter goto $ + 3
( Left Parenthesis 1 + (d * 4)
) Right Parenthesis (Length + 1) * 256
! Item NOT (logical complement) if ! (a == b)
- Negation (2s complement) -1 * Length
~ Complement flags = ~flags
low(1) Return low byte of address movlw low CTR_Table
high(1) Return high byte of address movlw high CTR_Table
upper(1) Return upper byte of address movlw upper CTR_Table
* Multiply a = b * c
/ Divide a = b / c
% Modulus entry_len = tot_len % 16
+ Add tot_len = entry_len * 8 + 1
- Subtract entry_len = (tot - 1) / 8
<< Left shift flags = flags << 1
>> Right shift flags = flags >> 1
>= Greater or equal if entry_idx >= num_entries
> Greater than if entry_idx > num_entries
< Less than if entry_idx < num_entries
<= Less or equal if entry_idx <= num_entries
== Equal to if entry_idx == num_entries
= Not equal to if entry_idx != num_entries
& Bitwise AND flags = flags & ERROR_BIT
^ Bitwise exclusive OR flags = flags ^ ERROR_BIT
| Bitwise inclusive OR flags = flags | ERROR_BIT
&& Logical AND if (len == 512) && (b == c)
|| Logical OR if (len == 512) || (b == c)
= Set equal to entry_index = 0
+= Add to, set equal entry_index += 1
-= Subtract, set equal entry_index -= 1
*= Multiply, set equal entry_index *= entry_length
/= Divide, set equal entry_total /= entry_length
%= Modulus, set equal entry_index %= 8
<<= Left shift, set equal flags <<= 3
>>= Right shift, set equal flags >>= 3
&= AND, set equal flags &= ERROR_FLAG
|= Inclusive OR, set equal flags |= ERROR_FLAG
^= Exclusive OR, set equal flags ^= ERROR_FLAG
++ Increment(2) i ++
-- Decrement(2) i --
Allt detta är exempel på det som ingår i språket MPASM.
Till detta kommer sedan (i fallet med PIC16) ca 37 instruktioner som
sedan översätts till maskinkod.
Exakt *VAD* har man för glädje/nytta av att påstå att assembler inte är ett språk ?
Utöver att införa ett extra lager av förrvirring för den som är lite ny inom detta ?
Rent historiskt så är det även ett "2GL", d.v.s "Second Generation Language".
*Ren* maskinkod var 1GL, assembler 2GL, C, Basic, Fortran, COBOL o.s.v 3GL, olika "visual" verktyg o.s.v. är 4GL.
> Notera att det inte finns några assembler-kompilatorer,...
OK, kanske om man begränsar sig till (t.ex) PIC, men inte generellt.
Det finns kompilatorer som *kompilerar* assembler kod till maskinkod, det är dock inte PIC assembler...
Postat: 20 januari 2008, 22:29:16
av TomasL
Sodjan, allt det du räknar upp är och förblir IDE-Specifika makron, och har ingenting med ASM i sig att göra.
Det finns mig veterligen INGEN specifikation på syntax, "KeyWords" och andra språk-specifika egenheter, ej heller finns det någon form av standard på vad som är tillåtet och inte tillåtet.
ASM saknar all form av syntax, all form av regler, således kan det inte vara ett språk, enligt gängse definitioner på vad ett språk är.
Postat: 20 januari 2008, 23:09:02
av sodjan
> allt det du räknar upp är och förblir IDE-Specifika makron, och har ingenting med ASM i sig att göra.
Om du med "IDE" menar MPLAB, så är du fullständigt ute och cyklar.
Ingen av det jag räknade upp har ett smack med MPLAB (eller någon
annan "IDE" heller) att göra. Alltihopa har allt att göra med *språket*
"assembler för PIC".
Jag fattar fortfarande inte vad du har att vinna på en hemmabyggd definition
av vad "programmeringsspråk" är eller inte är. Assembler för PIC (eller för någon
annan arkitektur/plattform) är och förblir ett "Andra Generations (programmerings-) Språk" (2GL).
> enligt gängse definitioner på vad ett språk är.
Menar du med "språk" någonting annat/mer än just "programmeringsspråk" ??
Det skulle kunna förklara en del...
Postat: 20 januari 2008, 23:39:37
av TomasL
Gängse definitioner är:
A series of instructions written by a programmer according to a given set of rules or conventions (syntax)
Programming languages, like human languages, are defined through the use of syntactic and semantic rules, to determine structure and meaning respectively.
A standard which specifies how (sort of) human readable text is run on a computer.
Eftersom det inte finns nån som helst standard inom ASM, det ser ju olika ut för olika arkitekturer, så kan det knappast vara ett språk.
Ungefär som om vi svenskar använder runt 9 miljoner olika "språk".
Definitionen för ett språk, oavsett om det är ett naturligt eller ett syntetiskt (programspråk, esperanto mfl) kräver att det finns nån form av syntax, struktur mm, ASM saknar allt detta.
Postat: 20 januari 2008, 23:52:14
av TomasL
Nej det är ingen "hemmasnickrad" definition, utan snarare så att ett språk defineras utifrån semantik och syntax, vilket jag alla språkforskare jobbgar utifrån.
Saknas semantiken eller syntaxen är det inget språk.
Ett program skrivet i ett språk (C, C++, C#, Java, Forth, Basic, Lisp algol, cobol,
Fortran mm) kan förstås av "alla" som lärt sig språket.
Ett program skrivet i ASM är obegripligt för alla som inte är insatta i dels vilket utvecklingsverktyg det är skrivet för och dels vilken HW som avses, dessutom är det totalt omöjligt att flytta ett program från MPASM till nått annat assemblerverktyg eller HW.
Postat: 21 januari 2008, 00:22:53
av sodjan
Igen, jag kan för mitt liv inte förstå vad du har att vinna med en sådan
avikande uppfattning från vad som är allmänt vedertaget. Jag har själv
programmerat datorer i omkring 25 år nu, och jag kan inte minnas att
jag någonsin under den tiden varken har hört någon utrycka eller läst
någonstans en sådan konstig definition. Så en gång till, exakt vad
har du att vinna att nu försöka definiera om "programeringsspråk" på
ditt väldigt speciella sätt ??
Andra som är lite intresserade av programeringsspråks historia kan t.ex kolla :
http://en.wikipedia.org/wiki/Programming_language
http://en.wikipedia.org/wiki/History_of ... _languages
http://en.wikipedia.org/wiki/Assembly_language
Postat: 21 januari 2008, 00:47:40
av TomasL
Ingenting, men jag är av åsikten att saker skall betraktas i rätt kontext och benämnas rätt, då det kan bli mycket fel annars.
Postat: 21 januari 2008, 00:54:17
av sodjan
Aha ! Äntligen en punkt där vi är 100% överens !

Då kan vi lägga ner denna diskussion...
Postat: 21 januari 2008, 01:00:43
av falt
Jag kunde inte ladda ner filen, när jag tryckte på downloadknappen så hände inget.